回覆列表
  • 1 # 機器學習與資料探勘

    機器學習說到底是一門交叉學科,想自學機器學習,你首先需要弄清楚你需要哪些基本條件,這裡面的條件有多少學習需要的,有的是面試或者工作需要的,首先你需要一個本科以上的學歷,說實話專科學這個不現實,學不好是一方面,找不到工作是另一方面,其次你需要一下基本知識儲備,比如程式設計能力,統計學基礎、現代基礎、高數基礎等,在這些的基礎上才能說自學機器學習。學習機器學習你需要掌握各種演算法,分類、聚類、迴歸等等不僅僅是理論推倒而且是程式碼實現,多看書、多讀論文,多寫程式碼。

  • 2 # Java架構達人

    機器學習的“難”通常不在於數學,因為機器學習本身不需要很高強度的數學計算,而在於 debugging 難的問題。機器學習 debug 要比普通計算機程式難得多:出現問題的情形多,而且調試周期長。本文深入討論了這個難題,提出了在 debug 時需要注意的要點。

    在過去的幾年裡,機器學習便捷化方面的技術已經取得了顯著的發展:出現了很多相關的網路線上課程、精編書籍和架構理論。這些精編課程對前沿科技研究分析,分解成通俗易懂的語言。而架構理論方面則將普通問題抽象化,與構建機器學習系統相結合形成理論系統。這些發展某種程度上能夠使人們打破已有的認知圖示,加強對演算法工作原理和計算程式碼的理解。

    機器學習之難在於debug

    儘管如此,機器學習仍是一個相對“難”的問題。毫無疑問,提高機器學習演算法是一項艱難的科研課題,需要不斷的創新、反覆的試驗、不懈的韌性。而將現有演算法和模式與機器學習貫通運用則更難,這也解釋了為什麼機器學習方面的專業工程師的工資相比普通軟體工程師要高出很多的原因。

    這裡的難通常不在於數學計算,機器學習應用本身不需要高強度的數學計算,而在於前面提到的構建系統,包括如何為工具建立圖式以解決實際應用中的問題,這就要對現有演算法和模式,兩者權衡以及使用限制充分熟悉。機器學習技術是透過對不同型別的模式(比如課程、課本和論文等)進行應用的過程中,對這些模式進行檢測。當然,這種知識構建形式存在於計算機科學的所有領域,而不僅僅是機器學習領域。一般的軟體工程專案都需要對其他的框架、工具、技術以及設計決策幾方面進行權衡。

    機器學習的難點在於根本性的除錯(debug)難題。機器學習的除錯一般發生在以下兩種情況:1)演算法無法執行,或者2)演算法執行不太完美。機器學習“難”的獨特性在於,當執行效果不如預期時,想要檢測出哪裡出了問題極其困難。如果這兩種困難同時發生,那麼應用修復、升級以及結果顯示方面的調試周期將會延長。很少會發生計算執行從一開始直到最後,佔用大部分時間去做構建演算法的情況。

    機器學習相比傳統軟體,除錯困難增加了兩個維度

    標準的軟體工程中,遇到問題解決方案效果不如預期的情況時,一般有兩種可能:演算法問題和實施問題。舉一個簡單的遞迴演算法的例子。

    透過這種方法,列舉出執行效果不好的故障分析圖,如下:

    橫軸列出的是演算法設計上可能會出現的問題,縱軸是在演算法應用上可能會出現的問題。兩個維度上都有可能出現問題(如多重應用bug),只有保證演算法和應用兩方面都精確無誤,才能制定出正確的除錯解決方案。

    除錯過程中,需要憑藉直覺,結合不同的bug(如編譯錯誤提示,程式輸出結果等)資訊,去準確判斷問題所在。這些資訊和啟發式方法能幫助縮短鎖定範圍,快速處理問題。

    機器學習有兩個方面的常見bug:實際模式和資料。最簡單的例子,就如用隨機梯度下降演算法訓練邏輯迴歸。這裡,演算法準確包含梯度下降更新方程式,應用準確包括對特性和引數更新的精確計算。資料方面的bug包括嘈雜標籤(noisylabels)、預處理過程中由於缺乏監控訊號或資料不足導致的錯誤。模式bug包括建模能力的實際限制。比如,下圖展示了在非線性決策邊界中使用線性分類器。

    除錯過程從2D網格到4D超立方體(這裡只顯示了三個維度),第四個資料維度,我們可以想象成是這些立方體的序列(注意這裡只有一個小立方體是正確的解決方案)。

    機器學習極其“難”的原因在於,如果在一個維度上有 n 種錯誤的可能,2D維度中的錯誤就有 n*n 種可能,4D維度中的錯誤就有 n*n*n*n 種可能。這種情況下,依據現有資訊,建立直覺去發現bug就顯得尤為重要。

    幸運的是,機器學習演算法中,有更多的訊號可以用於判斷哪裡出了bug,比較重要的有:訓練集和測試集的功能缺失圖(plots)、開發資料集中演算法的實際輸出結果,以及演算法的中間計算彙總統計。

    如何解決延遲的調試周期

    另一個導致機器學習除錯非常困難的因素是調試周期長。通常,從執行潛在修復功能到得出結果是否可行,需要花上幾個小時甚至幾天的時間。網頁開發中,具備自動更新功能的開發模式可以極大地提高開發效率,因為這意味著可以最大限度地減少開發流程中出現的bug事件。而在機器學習中這很難實現,因為在資料集中訓練演算法需要花上幾個小時甚至幾天的時間。而深度學習模式更有可能導致調試周期延長,這就必須要進行“並行”試驗正規化。對於機器學習開發人員來說,同時執行多個試驗,是因為演算法訓練是開發中的主要難點,透過多程式同時執行以開發指令流水(對於程式開發者而不是應用者)。強制性地多程式同時執行的主要缺點在於順序除錯和試驗過程中,不能運用累積經驗。

    機器學習通常被歸結為一種直覺開發的藝術,有了這種直覺,在很多維度都可能出現bug(或可以提高)時,可以判斷出了bug(或需要提高)的地方在哪。這是構建機器學習專案的一個重要技巧,即當除錯範圍內呈現出的訊號,你會開始利用這個訊號嘗試判斷問題出在哪。我工作過程中經常會出現類似的情況。

    舉例來說,我最早遇到這樣的問題是在訓練神經網路時,總是出現週期性的訓練功能損失。這些功能損失在經過某些資料時會發生延遲,但很快便返回到一個很高的數值。經過很多的試驗和錯誤之後,我意識到這通常是因為訓練集沒有被正確地隨機化(這看似是一個數據問題,但實際上是一個應用問題),還有一個問題就是,在使用隨機梯度演算法時,只處理小部分的資料。

    總的來說,快速高效的除錯是一個非常需要的技巧,可以應用到現在的機器學習流水線中

  • 3 # Realyn

    機器學習其實是一個特別大的範疇,高效自學機器學習有兩個方面的關鍵要素:首先要對機器學習有一個宏觀的認識,知道哪些是領域是熱門且重點領域,做到抓住重點,有的放矢;其次,你需要在熟練掌握一門語言工具的前提下結合具體專案實踐,增加自己的實踐經驗,這個地方我給python打一個廣告。

    1: 機器學習可以解決哪些問題?

    主要分為兩類問題:分類問題和迴歸問題,其中分類問題又可以分為多分類問題和多標籤多分類問題。其他還有很多進階版本的問題,一般由多個問題複合而成,比如物體檢測,實際是把影象分割和分類問題整合到了一起;

    2: 機器學習演算法有哪些?

    我們大體可以將機器學習的演算法分為傳統機器學習和深度學習演算法。傳統機器學習演算法中,常見的有SVM,決策樹,隨機森林等,大都在sklearn中進行了整合,可以非常方便的呼叫。深度學習演算法主要依賴學習框架,主流的包含Tensorflow和PyTorch,各有優缺點,請自行了解做進一步選擇。其次就是深度學習的網路結構又可以分為卷積神經網路,遞迴神經網路,自動編碼器,對抗生成網路,圖卷積神經網路等。目前深度學習在各個領域都取得了巨大的效能提升,是機器學習中的重點領域,另外圖卷積也逐漸成為重中之重;

    3: 常見的機器學習的流程是什麼樣的?

    一個不失一般性的流程由這麼幾部分構成:資料集整理,資料集預處理,資料集劃分(訓練集,測試集,驗證集,常見比例7:1:2),模型訓練,模型驗證,模型測試。

    4: 怎麼評價模型效能好壞?常見指標有哪些?

    我們通常使用驗證集的資料測試並選擇最終的模型,然後用測試資料集來測試我們模型的效能。得到最終模型後,我們可以使用更大的獨立測試資料集來進一步評估模型的效能。評估模型效能,我們就需要使用具體的效能指標。根據資料集中不同類別樣本的比例,我們將資料集分為均衡資料集和非均衡資料集。均衡資料集我們可以使用準確率、損失值、馬修斯係數、F1-score、ROC 曲線以及 AUC 值等指標,這類資料集的評估相對容易。對於非均衡資料集,我們需要謹慎的使用準確率來衡量模型效能,結合具體問題,我們一般更多的使用F1-score和ROC-AUC等指標。

    5: 關於公共資料集。

    現在網上有很多公開的且標註完備的資料集,包括影象的、序列的、文字的等等,為機器學習提供了良好的學習環境。練手階段需要充分利用這些資源!

    此外,機器學習不是萬能的,很多情況下效能取決於資料和問題定義,不是每一個問題都能用機器學習解決。尤其面對現實問題,要謹慎樂觀,切勿盲目跳坑!

  • 4 # 機器學習與網路安全

    首先學習機器學習一定不能急於求成,第一個階段主要是學演算法,學一個演算法就一定要學透(手動公式推導+程式碼編寫),不要今天看一下SVM、明天瞅一眼隨機森林,最後都半途而廢!演算法學校要從簡單到複雜,首先學習一下邏輯迴歸、決策權、多層感知機等,其次深入學習可以研究一下整合演算法,因為目前現實專案裡應用最多的也是整合演算法,比如gbdt以及一些優秀的實現!

    其次,演算法程式碼實現是在深入理解演算法的基礎上才可以做,這期間可以深入理解演算法的一些細節,更有助於你去調參!

    最後就是學習現成的工具,比如sklearn 、lightgbm、spark等,因為工作中主要還是調庫再做封裝!

    題外話:有精力可以繼續學習深度學習,深度學習比較簡單,主要難點是最佳化演算法,不像傳統機器學習尤其是SVM那樣完美的數學定理!再有精力可以把TensorFlow 一塊學了,因為做專案不一定只做傳統機器學習!

  • 中秋節和大豐收的關聯?
  • 如何把孩子培養成為一個高情商,愛講話的人,尤其遇到突發事件,無懼所有,腦子轉彎?