演算法調包
㈠ 有沒有必要把機器學習演算法自己實現一遍
1對演算法細節的理解更加深刻了。書中畢竟不會給出所有細節,而且書本身可能就是錯的。我幾乎是把所有公式重新推了一邊,重新把這本書寫了一遍,自己存下的note裡面公式數量絕對遠遠多於書本身,期間也發現了書中無數的錯誤,這些錯誤在初讀的時候根本意識不到。這樣一遍下來,一個side effect就是讓我變得憤青了,看什麼paper都覺得爛。因為讀paper的時候,你會發現,很多paper違背基本常識,即使影響力非常大的一些paper里也有這樣那樣的錯誤。
2可以了解很多看書學不到的各種trick。所有演算法幾乎都有坑。比如hyper-parameter什麼意義怎麼設,怎麼初始化,numerical stability的怎麼保證,如何保證矩陣正定,計算機rounding error的影響,numerical underflow和overflow問題等等。
3對整個領域各個演算法的關聯有更深刻的了解,思維形成一個關系網。看到一個演算法就會自然的去想跟其他演算法的聯系,怎麼去擴展。如果一篇paper我不能把它納入到這個關系網里,我就覺得自己沒懂。要麼推出聯系,要麼推出矛盾證明這篇paper垃圾。另一個side effect就是我看paper從來不根據實驗好壞判斷優劣。雖然自己動手實現演算法有好處,但是性價比幾何還是個見仁見智的問題,畢竟這是一個很費時的過程。我並不認為一定有必要自己實現書上所有演算法,畢竟每個人所能關注的領域還是有限的,懂得演算法大致原理,具體用的時候在細研究就可以。很多演算法我也是寫完了從來沒用過。幾年過去後,我在回頭看自己的代碼也很難看的懂,細節還得看公式。但是對於自己的研究領域我建議還是有必要把經典演算法動手實現一遍加深理解。
㈡ 演算法工程師應該具備哪些工程能力
作者 | 木東居士
來源 | Data_Engineering
最近看了 Milter 的《演算法工程師究竟需要哪些工程能力》這篇文章,有所感想,因此也寫一篇關於演算法工程師的技術能力的問題,和大家分享一下居士關於演算法工程師的技術能力的觀點。
對於一名優秀的演算法工程師,他(她)要具備的不僅僅是出色的技術能力,也要有很深的業務理解能力和對外溝通能力,總之,要求可以很高!
但是,從職責能力的劃分上來講,演算法工程師首先是一名工程師,因此本文主要從工程能力要求上進行一些探討。
開始之前先放一份思維導圖,這將是這篇文章要分享的核心內容:
工程能力概覽
演算法工程師,從名字上我們就能看出,一名演算法工程師首先應該具備演算法能力和工程能力,我們可以認為這是基礎的技術能力。由於現在開源技術的普及,Sklearn、Tensorflow 和 Spark ML 基本已經成為大部分演算法工程師標配的工具庫了,因此,熟練的調包能力也是決定了一名演算法工程師能否快速實現需求。
其次,在真實的生產環境中,演算法的落地會遇到各種各樣的業務場景和數據環境,這也要求演算法工程師需要具備Pipeline 構建能力,將整個生產環境中的數據流和模型打通。同時,在生產環境中,會出現各種「疑難雜症」等待你去解釋,比如說為什麼實驗效果特別差?為什麼模型效果不穩定?這就要要求演算法工程師需要具備一定的數據分析能力。
很多時候,你會發現,你用在數據分析和Pipeline構建上的精力可能占據了你8成以上的工作內容。
當你具備了上面的能力時,你已經可以稱自己是一名演算法工程師了。此時,你可以去對著數據分析小得瑟一下:「你看,我能構建整個模型的Pipeline,你卻只能拿到別人提供的數據後調調包吧。「或者,你也可以去找開發得瑟:」你看,我懂了很多演算法哦,你就只會寫代碼吧。「
得瑟完之後,我們還是回歸正題,演算法工程師只具備這樣能力是否已經夠了?答案當然是不夠的。由於不同公司的團隊成熟度不同,工具化和流程的成熟度都不同,這就會對演算法工程師有不同的要求,比如說模型發布能力和報表開發能力,當然也會有一些其它能力,雖然可能不是特別重要,但是當這些工作沒人幫你做的時候,演算法工程師可能依然要承擔起這些工作內容,比如說灰度測試的能力、負載均衡的能力等等。
將上面的內容整理後,就是這樣一份思維導圖了(一張圖多看幾篇更能加深印象,因此我再貼出來一遍)
工程能力詳解
一、基礎能力
演算法能力
演算法能力就不多說了,演算法工程師的基本能力要求,不懂演算法對於一名演算法工程師來講是不太合理的。這里居士把統計學的內容也放進來了。
編程能力
編程能力主要分為兩部分:
Python、C++、Java這類編程語言,這三種也是演算法工程師需要了解的主流編程語言,一般掌握其一就夠,看不同公司。 Sql就是很通用的能力了,Sql也是一門編程語言,而是是數據處理最常用的語言! 很好用。 大數據場景下,要了解Hive Sql。調包能力
大家雖然會調侃調包俠,但是說實話,能調包調的很溜的人,也是不多的,比如說現在讓你自己用tensorflow構建一個復雜網路,不能google,你能寫出來嗎?能記清楚用法嗎?
Sklearn Tensorflow Spark ML二、核心能力
Pipeline 構建能力
Pipeline構建能力,這里想表達的更多的是整個數據流的構建能力,數據從日誌->特徵->模型訓練->反饋,這一個鏈條能否完成的能力,這裡面會有很多難題需要克服。比如說:
實時和離線模型一致性問題? 離線和實時特徵一致性問題? 實時特徵構建的問題? 數據延遲的問題?很多時候,模型發布之類的工作是可以由其他同學支持完成,但是數據流這種問題更多的是需要演算法工程師來解決的。
數據分析能力
這里的數據分析能力不是指商業分析或者業務分析,更多的是指特徵分析、演算法效果分析和各種異常問題定位分析的能力。
很多時候,兩個演算法工程師能力水平的強弱從數據分析能力上也能窺得一二。
三、輔助技術能力
輔助的技術能力是指,你會不會的影響不會特別大,但是也都是有用的能力,特別是不同公司的發展情況不同,很可能會出現一個演算法工程師既要做數據接入、又要做數據清洗、還要做演算法平台
也要搞前端、還要負責模型上線、系統運維。
這里就不再細講了。
思考一
聊一下對技術能力、工程能力和數據分析的思考。
居士個人的理解,技術能力更多的是偏向於一個一個的技術點,而工程能力更多就是在一個團隊中將項目做好的能力。很多演算法出身的工程能力不行,那麼他做的單純的一個模型是無法應用到實際生產中的,而工程就是指把理論落地實際生產的過程。那麼工程包含了什麼?它包括了系統架構設計和模塊設計、數據流搭建和平台搭建、調包或演算法開發、分布式、上線以及各種落地的代碼開發。報表和監控,其實本質也是做數據流,邊緣性的可能要做些後台和前端的開發。
然後數據分析能力是什麼?數據分析(不是純粹的數據分析)除了分析方法論和套路外,是一個很綜合性、相對偏軟一點的能力,比如說你通過分析發現了我們的系統有哪些可以優化的點,通過分析發現了問題的原因是什麼,這些都是分析能力。
思考二
針對前面的內容,和 Cathy 討論後,對整個思路做了新的梳理,大家直接看圖就好,居士也認為這樣描述可能更為合理。
思考三
這里再補充一個模型復現的能力,比如你看了一篇論文,發現這個模型可能很適合自己的業務場景,那麼你是否能力將論文裡面的模型快速用公司現有的平台和工具來復現?
居士認為,這一個是一個非常重要的能力,但是沒有想好具體該怎樣劃分。
㈢ 機械學習 能調包還需要學演算法嗎
在演算法方面,需要一定的數學功底。有些簡單問題,只需要概率論、離散數學、線性代數等即可解決,有些艱深的難題,需要近世代數、圖論等高深數學功底。
例如:請你設計一個演算法,把一堆正整數分成兩部分,使得這兩部分數字的和相等。如果不存在滿足條件的分法,請演算法輸出「不存在」;如果存在滿足條件的分法,請演算法給出結果。比如1, 3, 6, 7, 8, 14, 23,可以分成【1, 3, 6, 7, 14】和【8, 23】,每部分的和都是31。該問題是一個NP完全問題,目前沒有多項式時間解法。
如果你具有數學功底,顯然在設計演算法上會更強大,當然如果數學功底不深厚,就要多通過經驗和眼光彌補了。
㈣ 演算法工程師工作期間需要掌握什麼知識學到哪些核心技術
演算法工程師的主要核心技術基於數學,並輔以語言。要全面掌握的知識包括高級數學,復變函數,線性代數的離散數學,數據結構以及數據挖掘所需的概率論和數學統計知識。不要太受約束去平時閱讀教科書並多練習,並培養良好的思維能力。只有那些有想法的人才能擁有技術的未來。嘗試實現您遇到的任何演算法,無論演算法的優劣總是有其自身的特徵。此外,您必須具有一定的英語水平(至少6級),因為該領域的大多數官方材料都是外語。
計算機及相關專業本科以上學歷,在互聯網搜索,推薦,流量或相關領域有2年以上工作經驗。熟悉機器學習/自然語言處理/數據挖掘/深度學習中至少一項的原理和演算法,並且能夠熟練地建模和解決業務問題。精通Linux平台下的C / C ++ / Java語言開發,精通使用gcc / gdb等開發工具,並精通Python / Linux Shell / SQL等腳本開發。熟悉hadoop / hbase / storm等分布式計算技術,並熟悉其運行機制和體系結構。具有出色的分析和解決問題的能力,思路清晰,並對工作挑戰充滿熱情。具有強烈的工作責任感和團隊合作精神,並能夠交流和更好地學習。
㈤ 圖像演算法工程師待遇高嗎
的確算得上是一個入演算法坑的黃金時間,曾經的條條大路通 CS 變成了條條大路通 AI,不管你曾經讀的是物理還是生物,化學還是數學,只要你會 Python,會統計學基礎,那時的我都會推薦你們來試一試加入演算法這個坑,我也抱著體驗的心態開了幾次知乎 Live 都講了一些關於演算法入門相關的課,按那時候來講,只要你「思路正常,邏輯清晰,吃苦耐勞,肯學習」,在演算法這個坑裡摸滾帶爬四五年到現在,你要是在大廠,基本上都能拿到這個數,放一張最近的圖可供參考。
圖片引用至 @曾加 ,可以參考這位大佬的最新文章:
曾加:最新!互聯網大廠各職級薪資對應關系圖(2020年初)
zhuanlan.hu.com
圖標
以我熟悉的阿里為例,文中所說的二三十人團隊,那基本上就一個P8主管,下面再拆成2-3個小組,每個小組有一個P7/8帶隊,帶著一群P5-P7幹活。這就基本構成了阿里的一個最小組織單元,每年的績效和獎金大體上都是由這位P8主管決定的,所以我們一般尊稱為老闆……
扯遠了,其實我想表達一點,如果現在再有人來問我,學了 Python 之後怎麼樣加入演算法坑比較好,我的建議是不加入。
我們常說的演算法,本質上是統計,而統計是基於大數據的。目前能真正擁有大數據基建的企業其實並不多,能通過演算法產出新價值的就更少,所以看起來搞 AI 的風風火火,其實大部分都是投資人含淚投的錢,背後能賺錢的少之又少,即便是在大廠也不例外。
所以一個目前仍不賺錢的行業,沖著心中偉大的理想和抱負,會像招開發那樣花重金吸納大批人才嗎?答案明顯為否,其實只需要花重金留住頂尖的演算法人才即可,調包調參的 AI 選手無論何時都可以招得到,而目前大部分通過自學、培訓機構出來的 AI 人才,就是這樣的 tool boy。
巧的是,曾經我也是這樣的 AI 選手,但誰叫我運氣好,混得好不如混得早,現在轉去數據分析那可就是降維打擊了(手動狗頭
最後再概括一下,今年是 2020 年,如果想從事演算法和數據行業,建議先讀一個相關專業的碩士,比如數據挖掘、圖像識別等,且學校不能太非主流,不然可能簡歷面都過不了。
㈥ 會用匯編語言寫機器學習演算法是什麼水平
當你猶豫看書看完,然後對調包充滿疑惑甚至是覺得很空動時,問題出在編程水平不足而非機器學習演算法本身
㈦ 本科畢設需要用到機器學習的演算法比如說支持向量機,演算法需要自己寫嗎還是用現成的
有現成的庫啊。你看看sk learn這個,裡面有自帶數據集和演算法,使用很方便。裡面支持向量機分為支持向量機回歸SVR和支持向量機分類SVC
㈧ 為什麼手動實現決策樹效率比調包低很多
1.每個演算法模塊按照「原理講解→分析數據→自己動手實現→特徵與調參」的順序,「原理加實踐,頂天立地」。
2.拒絕簡單的「調包」——增加3次「機器學習的角度看數學」和3次「Python數據清洗和特徵提取」,提升學習深度、降低學習坡度。
3.增加網路爬蟲的原理和編寫,從獲取數據開始,重視將實踐問題轉換成實際模型的能力,分享工作中的實際案例或Kaggle案例:廣告銷量分析、環境數據異常檢測和分析、數字圖像手寫體識別、Titanic乘客存活率預測、用戶-電影推薦、真實新聞組數據主題分析、中文分詞、股票數據特徵分析等。