如何看待「機器學習不需要數學,很多演算法封裝好了,調個包就行」這種說法?
謝邀。不抖機靈,想從接觸過機器學習學術圈但已投身工業界的角度來回答。
我認為:大部分機器學習從業者不需要過度的把時間精力放在數學上,而該用於熟悉不同演算法的應用場景和掌握一些調參技巧。好的數學基礎可以使你的模型簡潔高效,但絕非必要的先決條件。
----------------------------------------------------------------------------------------------------------------------
原因如下:
1. 即使你有了一定的數學功底,還是不知道怎麼調參或者進行優化。這話說的雖然有點自暴自棄,但捫心自問在座的各位,當你發現accuracy不好、loss很高、模型已經overfitting了,你唰唰唰列列公式玩玩矩陣就知道問題出在哪裡了嗎?不一定。誠然,懂得更多的統計原理可以幫助推測問題出在了哪裡,你可能換了一個loss function或者加了新的regularizer,但結果不一定會更好:(
數學基礎之於機器學習從業者很像debugger之於碼農,它給了你方向,但不能保證你一定可以解決問題。那怎麼能解決問題?只有經驗經驗經驗,別無他法,有時候甚至靠的是直覺。數學基礎是好的內功基礎,但你調包調多了,其實也慢慢能抓到一些感覺,不必看不起「調包俠」。
2. 工業界可以應用的模型是很有限的,可調的參數也是有限的。工業界選擇模型非常看重可解釋性,效率,以及和整個系統的整合能力。舉例,在我的工作中,大部分時間都在使用Regression和Decision Tree相關的演算法(如 Random Forests)。是因為這兩個演算法最好么?不,恰恰是因為這兩個演算法穩定及高效,而且容易解釋。對於這樣的模型,你即使數學能力很強,能調整的參數也是有限的。根據網上的例子和經驗,大量的工程師可以在數學基礎稍弱的情況下做到很好的效果。
3. 數學/統計知識已經成了既得利益者刻意為外來者建立的一道壁壘。不知道大家有多少人是從事過ML研究的。我個人的觀察是做出成績的ML研究人員是有限的,科班出身的researcher更是遠遠無法工業界的空缺。所以大家沒有必要擔心會被轉行者搶了飯碗,也沒有必要刻意鼓吹一定要懂矩陣,凸優化,等數學知識才配做機器學習。大家都是出來賣的,不必互相為難。說來慚愧,在工作中我常常跟老闆說這個人不能用,你要用我這種科班出身的人,但我內心是不贊同的。
每當我看到知乎上有人問機器學習怎麼入門,結果大家立馬推薦第一本就看PRML和Statitical Learning以及一大堆公開課和數學課的時候,我的內心是崩潰的。各位答主的目標是把所有人都嚇回去還是秀一下優越感?
4. 理論模型和實際應用分的是兩塊不同的蛋糕。承接第2,3點,做理論研究的發力於突破,提出新的模型或者優化方法,做應用的致力於把模型應用於數據上,攫取商業價值。這兩者不存在利益衝突,做理論的人有自帶正統光環的優勢,所以更該顯得大度一些。只有「調包」的人越來越多,這個行業才會繁榮,因為證明技術落了地,可以帶來實際價值。
5. 行業的發展趨勢是降低工具的使用難度,這讓我們不必反覆造輪子。亞馬、遜谷歌、微軟等各大平台都開放了他們的機器學習工具。以前人們還需要自己寫各種模型,好一些的調一下sklearn,但現在Azure ML Studio已經方便到零代碼了。年初的時候,我試了一下ML studio,簡直方便的可怕,完全是圖形拖動連接就可以建立模型,那一刻我仿似看到了自己即將失業。
6. 文藝一點說,我們需要更包容的心態,切勿文人相輕。想要接觸了解一門學科,應該先有興趣,才有探索的積極性。就像我們第一次看到Hello word出現的樣子,很多剛入行的人第一次看到機器學習能解決實際問題時,會產生濃厚的興趣。
我怕的就是所謂的圈內人都說你必須要會矩陣分解,必須要會用trace算導數,必須會優化,才能開始學習機器學習。這個周期太長,很多人連開始的勇氣都沒有~我覺得不管怎麼樣,要先動手做起來,發現自己的不足,再去補充需要的東西。
既然學術是自由的,我們就打開大門,歡迎大家都進來坐坐。如果他/她不喜歡,歡迎到隔壁串門。但我們不要給自己家門壘了高高的台階,說閑人勿進。久而久之,難免門可羅雀。
----------------------------------------------------------------------------------------------------------------------
綜上,我覺得應用機器學習模型和技巧既不能完全不懂數學,兩眼一抹黑,也不該要求每個從業者都要精通各種數學理論。模型應用者要長存對理論的敬畏之心,不要總想搞個大新聞說「機器學習也不過如此」,但做理論的也不必覺得高人一等,別人都是二等公民。
好了,不多說了,我去調包了(滑稽)
這跟不懂演算法的實現也能把產品做出來的道理是差不多的。世界上那麼多開發遊戲的,都知道怎麼做引擎嗎?當然不知道,也不需要知道。
我用的是R,做的是量化交易。機器學習這裡我理解是統計預測模型,比如線性回歸、LASSO、elastic net、neural network、gbm、random forest、svm、deep learning等等。
一般機器學習模型是一個大矩陣,一列是y,其他是x,然後扔進模型跑一下,很多封裝好的命令可以一行跑出來,裡面包含了croos-validation和參數優化。參數優化可以自己設置,類似grid search。然後可以根據結果進行調整。這大概就是做機器學習的過程。或許數據清洗和收集會花大量時間,但是跑模型的程序不會太長。
當然,如果跑下來效果不理想,就需要調整參數了。不同模型調整起來很不一樣。有些人會說「神經網路比svm,boosting好」,很大程度上是因為:
(1)他更熟悉神經網路;
(2)他對神經網路有更深的感情,花了10倍的時間調參;
(3)他就是要證明神經網路更好,在svm上選一個差的;
所以很多時候模型的結果跟使用者本身的水平和偏好有關,跟模型本身無關。
至於需要不需要數學。如果僅僅是調參方面的活,從100個lambda取一個最好的,相當於從100個數字里選一個最大的或最小的,我不清楚這是小學數學還是初中數學,反正一定去不到高中。這方面的編程,我不覺得比遞歸畫圖那些複雜,而且我清楚地記得我學遞歸畫圖LOGO語言是小學5、6年級。那是不是說「使用機器學慣用到的數學和編程只有小學水平,沒必要招計算機博士了,小學畢業生就可以了」。
應該說絕大多數的實際場合的應用只需要使用已有的程序包就可以,但很多機器學習博士是研究計算機視覺和自然語言的,那些還不是很成熟,還有很多深挖的空間,這肯定需要專門的博士才行。
總的來說,當不同的人說起機器學習的時候,雖然都是用的同一個詞,但是他們實際上指的是完全不同的東西。
寫在前面,雖然本答案觀點可能會讓很多同行難受,但希望大家能夠認真思考後再噴。另外,爪機錄入,排版請大家多包涵。
先說答案:從趨勢上看,大多數人工智慧工作者會是這樣,並且只有這樣,行業才能邁向成熟。下面分別從道理上和現狀上分析。
首先,從人工智慧的目的來看,我們認為什麼樣的演算法是一個好的人工智慧演算法?對於一個具體問題,是用高度定製的演算法解決符合人工智慧思想,還是用高針對性數據加通用演算法符合人工智慧思想?任何一個從業者都應該清晰的知道是數據驅動的演算法才是真正的人工智慧演算法吧!那麼我要多問一句,為什麼?為什麼我們應避免用定製演算法來提升性能?(誠然,這其實是多數要發論文的朋友最常乾的事情,通過針對某一問題精調演算法和參數來得到一流的實驗結果)因為,任何形式的定製演算法,本質上說,都是在增加演算法的先驗假設,而這一過程其實就是我們使用傳統演算法時所做的,用設計者的猜想來建立系統模型解決問題的經典流程,區別只不過是我們建立模型時使用了一些更新的演算法罷了。這樣做的問題非常典型,就是演算法〔人為的〕過擬合,雖然在數據集上測試效果好,但實用性會大度降低--懂過擬合的朋友一定明白我在說什麼,不理解的朋友看結論就好了。但顯然,在這樣一個弱人工智慧的時代,我們不可能全靠數據解決問題,必須還是要考慮演算法的設計,而我的建議是,如果你的研究方向不是演算法本身而是在某一背景下的應用,那理想的工程實踐還應該是〔數據驅動優先,參數為輔配合,避免訂製演算法〕。
其次從產業發現看,一個對所有從業人員都要求學習大量的、內在的、複雜的技術理論的行業絕對是一個市場空間極其有限的行業。其主要負面性體現在兩個層面,第一,大量項目成本的不可行,從業人員門檻越高,價格自然越高,資源也越稀缺:所謂資源稀缺,就是指只要脫離行業核心應用領域,需求方就很難接觸到技術提供方,以至於很多很好的應用點很難被發現。第二,則是本文讀者要反思的問題了:深入理解技術細節的人,對市場、應用背景的理解和投入的精力往往有限。從業人員會把應用點和方法模式的制定扔給產品部門,並且很容易對這些工作表示不懈。我們來思考任何一個成熟行業,比如就說是離我們最近的軟體行業,如果一個軟體公司絕大部分程序員都每天只關注軟體底層和內部原理,只讓一些不太懂軟體開發的人去弄跟用戶有關的需求相關的功能、體驗,這樣一個公司在現代還能存貨么?現在哪個公司不是要把需求、體驗放在首位?那麼,在看本文的諸位大神,請你們考慮一下,在實際的開發中,會不會真的有些孤芳自賞?所以說,如果我們的行業不能形成像軟體開發行業那樣大多數從業人員只需適量的學習就可以勝任大部分工作的狀態,那麼咋們就永遠不是個正經的 行業,無論多高的關注度投入,咱們永遠就是個 泡沫!
順便一提,各位做智能的朋友,你們在指責一些人只是會用庫的同時,有沒有想過,自己的編程水平,如果用你們自己的邏輯審視的時候,大部分人其實也是不合格的?編譯原理、體系結構什麼的都不懂也在寫程序?話說到此,願意思考的朋友肯定就有所反思了,下面我們談談實戰。
首先,我相信,即使是強調理解演算法的朋友,也少數是自己真正實現演算法的,為什麼這樣說?因為現在主流演算法要不是什麼Spark實現,就是Cuda實現,這兩個想寫出高效的程序都非常不容易,說句不客氣的話,這比學AI難多了。所以真的擅長這兩個工具的人,比AI工程師收入高,很多就不搞AI了。(所以我現在也鼓勵很多學生,學實現可能比學演算法前途更好)所以,我們這裡主要還是討論理解算但不設計演算法的情況~大家都清楚,這樣的人在行業佔主流。當然,本文也不談大神,只說還在學習的平民。
我這裡首先要談的是學習的收益,而我的觀點是,與其把時間都花在深入理解演算法上,不如去橫向的多學習演算法。這裡我們要針對兩類不同背景的朋友來說,第一是應用數學出身,對優化類問題有充分的理解。這裡我勸各位一句,只要您不是要在純理論上有跨越式的突破,您的基礎已經對現在的所有典型應用綽綽有餘了,出於專業背景習慣去大量思考的那些點,說實話我很少很少遇到真的對您的項目產生了實質性影響的。所以對於這樣背景的朋友,應該做的事情主要有兩件,了解需求和了解慣用法。需求不多說,放下架子世俗一點就是了。慣用法很重要,你要清楚的不僅是演算法的原理,還有在哪些情況下,哪些演算法大約可以取得哪些效果,這絕對不是僅僅減少些無意義實驗的時間這樣簡單的事情,而是培養理科背景的朋友工科思想的問題,這個問題太大,有機會再說,這裡只說重點,AI絕對是一個工程問題,也就是說是一個考慮誤差,考慮成本,考慮實踐,考慮維護,考慮各種各樣事的問題,如果只用理科思想考慮,你做的永遠是一個玻璃模型。下面說說非數學專業的朋友,恩,那你們該補的功課還是要補的,不要看了我的題目就開始墮落了,但是,我這裡還是要說說你要補什麼。絕大部分學科,尤其是工程技術學科,你都可以把你的知識分成〔觀點〕〔理論〕〔實踐〕,如果你想和某個學科的人合作,或者管理某個學科的人,那你需要理解的是觀點,也就是說,拿到一個問題他們會怎麼看,怎麼分析,基礎假設是什麼,自己最重要的,什麼叫一個好的設計。如果你想開始從事一個領域,你需要的是學習實踐或是說慣用法,從具體工作開始,從簡單工作開始,先實踐,後理解。如果之後你想在領域有所深入的理解,那你需要的是回歸理論。現在人工智慧領域的問題之一就是缺少足量的中層工程精英,無論是學習還是項目都嚴重缺乏方法論,一味最求高大上(然後在交付時改成傳統方法,別跟我說你團隊沒幹過這事)。我的建議是,我過你想成為行業中的一員,那你要做的就是先理解什麼是人工智慧,方法是學一些最經典的理論,理解這個學科的人怎麼看問題,然後直接學習結論,也就是用庫把實驗做出來,因為你乾的任何問題,其實都有高手解決過,只要你觀點正確,就能看到你的問題其實就是某些已有問題,或者反過來說,你抽象問題的能力越強,代表你的理解越深,只有菜鳥和裝X的人才看什麼問題都是不同。在這樣的背景下,你每多學習一種(一類)演算法,你能解決的問題就多一種,這絕對比你用其它演算法猛調參數有效。(還是那個前提,如果你不是論文灌水為目的,如果是,那用本身不是最優的演算法調出最優的效果更容易發表,當然,個人並不贊同和鼓勵)唯一要提醒的是,當你能解決一堆問題的時候,不要自大,永遠記得,有比你厲害的人存在,而最厲害的,是搞理論的。
所以,我的觀點是,對行業絕大部分人來說,應該是有限的學習理論,大量學習和實踐工程應用。對一個具體的學習者來說,抱有成為業界尖端的信心是好的,但還沒達到基本從業者水平就盲目深入絕對有害,就好像一個人非要從編譯原理開始學編程一樣的不可理喻。對已經有所成的朋友來說,則應該更多的考慮行業如何更為健康,而不是透過強調你已經掌握的知識的重要性來自我肯定。
~~~~~~~~~~~~~~寫在後面,這是我離開知乎1年後回歸的首個答題,期間我在私信看到了大量的交流和求助,由於時效性未知,所以之前的就不回復了,但今後還是歡迎大家一起多多交流,更希望大神能多多指教。
Sean Parent 有時候給 Photoshop team 里的人開課。他喜歡從晶體管的結構講起。他說:他以前總是說一個好的工程師必須了解這些。
接著他講,有一次他結束了以晶體管結構開始的一次講話之後,Donald Knuth 走過來和他說:我就一點都不知道晶體管結構。雖然 Sean 還是沒有完全推翻自己的看法,但是以後就不說得那麼絕對了。
======================2017.11.02補充========================
更變態的來了,基本上把神經網路都封裝了,更不用說演算法了:
keras項目:Keras中文文檔
tensorflow的tf.estimator: tf.estimator Quickstart
=======================2017.10.22補充==============================
最近在玩TensorFlow,基本驗證了原答案,舉幾個簡單的例子:
tf.sigmoid: sigmoid演算法實現
tf.nn.softmax: softmax演算法實現
tf.squared_difference:差平方
tf.train.GradientDescentOptimizer:梯度下降演算法優化器
tf.nn.relu:relu演算法
tf.tanh:雙曲正切函數
tf.nn.conv2d:卷積層
tf.nn.max_pool:池化層
一行簡單代碼:
=======================以下是原答案================================
我記得我剛畢業的時候,老師學長諄諄教導:計算機體系結構很重要,8086指令、段地址、寄存器、內存定址、指針、深入淺出MFC、冒泡排序、快速排序、鏈表。。。。。。很重要,如果不懂,肯定不能成為好程序員,就算是同樣調用API完成任務,你要是懂這些,關鍵時刻就你會懂,老闆不給你加薪給誰加薪?
然而,畢業後我沒有去做嵌入式、沒有去做驅動、沒有用彙編,以上這些全部都沒什麼卵用,用MFC也只是調用API,沒有自己手寫冒泡,後來用Java,HasMap、List等都是調API,也沒見老闆因為我不懂降我工資,因為我老闆也不懂這些,他只看我有沒有完成任務,有沒有給它賺錢,他不會管我是調用API還是寫彙編完成的;也沒見哪位同事因為懂這些加薪了,因為工作中根本用不上!
相反,我發現Java虛擬機垃圾回收原理、MySQL索引設計技巧、tcp網路編程模型、CAP、BASE。。。。。。等非常有用,不但解決了業務問題,老闆還給我加薪,公司還給我升級,還可以到外面給別人演講!
所以,回到題主的問題,你應該先問一下自己幾個問題:
1)你是做什麼專業的
是機器學習理論研究么? -&> 如果不懂數學,還是儘早轉行吧!
還是將機器學習應用到業務中去?-&> 不一定要懂很多數學,確實演算法封裝好了,應用就可以了,至於說調優,也是調參數,不是調演算法,要開創一個新演算法,那就屬於機器學習的理論研究範疇了。
2)現在機器學習發展是什麼階段?
相當於50年代的紙帶編程,還是60年代的彙編?還是70年代的C語言?還是90年代的Java?
我理解機器學習現在類似於70年代的C語言,雖然寫起來很方便了,但還是要和指針內存打交道,這裡的指針和內存就是機器學習的演算法中的數學知識,所以我覺得即使演算法封裝好了,也要理解基本原理,不然這麼多演算法,你怎麼知道選哪個演算法?
謝謝邀請,不過貌似來晚了啊,補充一下作為一枚在讀小碩的一點點看法吧
- 這句話大概說的是未來的圖景吧:當所有AI/ML/DL演算法都非常成熟,且在工業界下已經形成相應的標準(類似於視頻編解碼中,AVS,MPEG那種標準)之後,的確如此;
- 在這之前,既然需要工業界形成標準,那麼應該少不了大公司的技術研發、產品設計、市場運營,這需要一個周期,可能還比較長;
- 在這之前,公司需要招聘和培養人才,需要招聘什麼樣的人呢?基本上兩種吧:①對相關演算法理解比較深,應用比較嫻熟的演算法工程師;②開發能力和工程經驗比較豐富的程序員;
- 在這之前,也就是我這個時候了。作為一枚不再繼續讀博、準備找工作的AI/ML/DL碩士生,想要找到一份滿意的工作,需要怎麼樣呢?—— ①不懂數學,講不清演算法原理?哼,你猜一流公司的面試官會不會屌你呢?②只懂調參,調包,寫paper?哼,你以為你是科學家,底下一幫小弟幫你幹活?別做夢了,你就是小弟!!③你以為只會調用PyTorch、TensorFlow、MxNet的那些package,人五人六地架構各種網路就行啦?T Y T N!!LeetCode沒刷爆,動態規劃C++/Java/Python 寫不出來,哪涼快哪待著去吧!
- ……
各位且行其珍惜呦。
幾十種語言寫成的幾百個庫中數千個演算法實現上萬的參數,說吧,用哪個,全砸丫臉上丫也挑不出來
一般來講,做某個層次的軟體,你需要熟悉比自己更底層一階的東西——不用能夠編寫,但是要熟悉原理性的東西。比如你寫Java系統,那就得熟悉JVM那一套。
更何況如果你對它底層的數學一點都不懂,那你怎麼判斷某項操作的時間、空間代價?這對於軟體開發是非常基本的事情吧。
打完了才發現其實回答有點跑題,不過就這樣吧,調參還是很需要數學的。。。
之前看過《穿普拉達的女王》的一個片段記憶還滿深刻的。這一段內容是女主陪著女魔頭和一大堆超一流設計師討論一個配飾的細節。女主不是很理解她們花如此大的功夫在這麼細節的東西上面於是笑出聲來,女魔頭隨後訓斥道:你以為你不喜歡打扮就和這些頂尖的時尚無緣,但事實並不是這樣。這些超一流的奢侈品牌設計師花了很大功夫創造出來每年的時尚潮流並在T台上展現。隨後那些中高端的服裝公司根據這些潮流指標打造出屬於自己的設計(這些是大家能買得起的,不過依然很貴),最後那些請不起高端設計師的平民服裝品牌就直接根據這些現成的設計拼拼湊湊讓所有人都能夠買到。
我個人理解的女魔頭的意思是,其實高端低端的時尚只是一個金字塔的共同組成部分而已,它們並不是割裂的。金字塔頂端的設計師創造時尚,金字塔低端的設計師讓時尚推廣到普通人中。我們離不開那些頂尖的奢侈品品牌去引領潮流,但也離不開平民品牌去讓所有的人都能夠把這些廉價享受這些潮流。
機器學習技術,或者說任何一個科技的流動其實和這個時尚趨勢的流動有著異曲同工之妙。最牛B的天才可以創造演算法;很牛B的人可以改造演算法,做成黑箱;普通的人呢,大部分時間就清洗數據調參。這裡面一定有個高下之分嗎?只能說大家都在做著自己的貢獻吧。參加Kaggle比賽的高分者很多也就是import xgboost import LightGBM 然後調來調去.但他們的演算法確實能給那些出題的公司帶來(潛在的)收益。
不光是機器學習,不管你做什麼高大上的東西,如果你只是鼓搗api,確實調調借口就行了。因為牛逼的東西大多對開發者比較友好,文檔豐富。
但是,只會鼓搗api有兩個壞處
1.若干年後,你仍在api上艱苦奮鬥,薪水低的一逼。你兒子說爸爸我想玩ps4x代,你只能幹瞪眼,告訴兒子小孩子不能玩遊戲。被剛進來的應屆生鄙視,年齡這麼大,只會調介面。再嚴重一點,直接失業也是有可能的。
2.你在任何一個領域都沒話語權,因為你不深入。你變成了一個三流的偽全棧工程師。老闆讓你往東你不敢往西,永遠也不敢說,老子不幹了。
以上兩點,都是有真實例子發生在我身邊的。我以前也沒覺得演算法啊,數學啊,多重要。但是當我做的東西多了,我真的,真的在一些場景下找到了我之前學過的演算法知識,並且加以運用,提升效率。雖然我做的東西可能沒那麼高的性能要求。但是,這至少證明了兩點
1.學技術,勿以善小而不為。別忘記自己當初入行的初衷
2. 演算法,數學這些東西都是內功,很多人平常不在意,也用不到。但是真到了用到的時候,往往都是關鍵時刻,這就是你體現核心競爭力,比別人牛逼,讓老闆只給你漲工資的最好理由
打個比方, 簡化問題, 對於賽車來說, 有兩個職業, 分別是賽車的研發工程師和賽車手.
研發工程師對於這個賽車的內部原理是一清二楚, 但讓他開的話, 水平可能一般般.
賽車手對於賽車的內部原理可能一竅不通, 但經過一段時間的刻苦練習, 可以將賽車開得很熟練.
這兩個職業誰也別瞧不起誰, 做的是不同的工作.
我確實發現有些人對於機器學習的內部原理不太懂, 但應用(調包)起來確比大部分科班出身的人要好, 比如kaggle的這位Leustagos | Kaggle,
這個問題應該這麼問:
各個領域的機器學習模型和演算法能封裝到什麼程度?產業鏈怎麼分工?
不能簡化成「要不要數學」這種黑白思維,加減乘除也是數學,不需要數學怎麼編程?黑白思維馬上就形成站隊廝殺的局面。
我把機器學習產業分工簡化成提供者和使用者,提供者負責研究和封裝,使用者負責把它應用到具體的工程中去。
針對不同的領域封裝程度肯定不一樣,標準化程度高的領域,演算法適用性就強,需要調整的東西就少。我把封裝程度按從高到低列一下。
A,問題非常明確、標準的領域,比如人臉識別,封裝成黑箱,介面和參數也非常簡單,從使用的角度和其它庫沒有區別,幾乎所有軟體工程師都可以調用。
B,問題有一個通用的模式,但有一些可以預測的變化,核心演算法封裝成黑箱,但使用介面比較複雜,需要掌握演算法的基本原理和相對簡單的數學基礎,懂得對業務特徵進行抽象和參數匹配,能力比較強的軟體工程師可以勝任。
C,問題類型可以抽象出一定的模式,但具體問題的變化非常大,模型不能覆蓋所有的變化。可以做出一個原型演算法,但不能做成黑箱,需要根據具體情況修改優化模型、演算法、參數。這種情況軟體工程師無法勝任,需要機器學習專業人員。
D,問題很難抽象成統一的模式,需要根據具體問題建立具體的模型演算法。
對於A、B領域,提供者做產品,可以迅速做大。對於C、D領域,提供者做服務,比較消耗人力,價格貴速度慢,只有大型項目付得起成本,應用面比較窄。
所以,分領域討論各自可以做到哪個層次啊,我不懂機器學習,也沒有完整回答問題,只是給回答問題提供一個框架。有的時候問題根本就不是分類,聚類,regression這些有很多現成包的問題。
有時候就算是上面這三種,也沒有現成的東西。比如聚類,因為要能解釋結果,也因為要融合進一些額外的行業知識,不能直接用現成的cluster演算法。
看到有人說圖模型,exactly,用圖模型的步驟是,建模,參數估計,預測。建模的時候要能寫出概率分布,參數估計的時候要能寫出似然函數,這時候可能會用些optimize的包,但這可不是調參數那麼簡單的,最起碼要能求梯度吧。
很贊同高票答案,如果只會xgb,rf,cnn調參數什麼的,也算data scientist,沒問題。但怕就怕有些工作不自己建模就解決不了。我們這邊七三開吧,三成的工作靠調參數解決不了。
不過沒事,都是團隊合作,需要數學的時候,找個會數學的合作就行了。合作幾次,不會的人也都能學會了。
哦 對了,還忘了個比較有技術含量的事情,做feature,我不是說七三開么,那七成裡面都是要好好設計變數的,也就是feature engineering,還是有點技巧的。讀書時候的事,同樣用java,有一次我給老師發郵件,說,這個作業數據的size是不是太小了?我寫的代碼大概42s多一點就搞定了,老師回郵件說,真的嗎?別人都說size太大了,你把你的程序發給我看看,我就發了,然後老師回復說,的確,下次搞大點
然後第二天,我上課見到同學,同學說,哎呀,這個size太大了,我寫的程序,跑了一個晚上都沒跑完,我說哈?
後來看了下,她是暴力解,複雜度是n^3,俺用了hashcode的amortized constant的複雜度
現在越來越反對各種框架啊,引擎啊,把人都變笨了
不但不用懂數學,也不用懂編程,框架都把運算元寫好了,調個運算元就好了。
建築工地的工人不需要學建築,按照工頭指示再加幾位老工友的「培訓」即可輕車熟路。
要成為一名優秀的建築師卻需要不知多少年的寒窗苦讀,畫畫功底、力學知識、工程製圖、軟體操作等等都不可或缺。
如果想一輩子在AI界搬磚,你確實不需要學數學,調用封裝好的包,按照數據學科家等技術人員的指示,即可造出大樓。
And good luck with that, 因為任何一個上過幾月甚至幾周培訓學校的學員,都有可能取代你的這個位置。
當然我沒有否定搬磚工的作用,任何高樓大廈都是由他們辛辛苦苦一磚一瓦砌成的。
社會有分工,in case 你想成為一名建築大師,不妨看看我在下面的回答:
想學數據分析(人工智慧)需要學哪些課程? - 知乎
以及下面專欄--因為,機器學習 = 優化+統計+編程。
[運籌帷幄]大數據和人工智慧時代下的運籌學 - 知乎專欄
需要數學,不需要編程,只要你懂了其中的數學原理,再花一百塊錢找個碼農幫你調一下包就行了
好多小公司確實如此。招了一批不懂數學不懂統計的二本學生,模型亂用包亂掉,用不用得對基本靠運氣。偏偏老闆就喜歡這樣的人,不說了。。。
推薦閱讀: