目錄

另外本次分享不會有大段大段代碼,主要是理解為什麼這麼做。
在開始分享主題之前,我們可以先思考下,不管你用什麼語言 (解釋類型語言 或 編譯類型語言),你寫一堆的字符串,一頓解析編譯後,從匯編語言再到最後的機器語言 0 / 1,即是CPU"認識"的。CPU用來計算和控制計算機系統的一套指令的集合。電路實現這種運算。運算又是規則。以上,每一個步驟的描述都是為了應對日益複雜的問題,不斷抽象的過程。
不管我們怎麼抽象,都離不開計算,計算又離不開數學(利用抽象和邏輯能力) 。我們今天主題跟抽象、計算、數學這幾個詞,是很有關係的。
回到本次分享的主題,人工智能又是什麼?簡單的說是有海量數據 -> 歸納出規則 -> 解決問題。
Artificial intelligence is intelligence demonstrated by machines.
你會想這跟智能沒啥關係啊 ~ 我個人理解智能是玄學,那人工智能是什麼?

任正非說: 人工智能是統計學。
統計學: 是應用數學的一個分支,主要通過利用概率論建立數學模型,收集所觀察系統的數據,進行量化的分析、總結,並進而進行推斷和預測,為相關決策提供依據和參考。
Statistics is the study and manipulation of data, including ways to gather, review, analyze, and draw conclusions from data.
人工智能包括機器學習,例如線性回歸、邏輯回歸、貝葉斯模型、NN等。通過某個模型結構,基於訓練數據,得出相應關係的概率。深度學習又是機器學習的一個分支,是基於NN神經網絡為基本架構的拓展,常見的CNN(圖像處理)、RNN(語音識別)等。
概念上就不做過多解釋了,我直接上參考的結論吧。
參考:

前情概要的小總結: 應對海量數據,我們需要通過一些方法 (工具? 抽象能力?計算?算法、數學?...),俗稱AI,來幫助我們解決問題。
回歸模型 線性回歸 例子 🌰我們先通過一個簡單的例子,來看基於tensorflow.js實現的線性模型。
https://linjiayu6.github.io/Tensorflow.js-LinearRegression/
首先,在屏幕上點幾個離散點。

一直點擊【模型訓練】,我們希望得到訓練好的線性模型 (y = ax + b),其中a,b是需要我們通過幾個點訓練出的值。

最後得出: Y = 1.040215015411377 X + 0.33632710576057434。

我們使用了一些數據,通過TensorFlow.js一些方法的調用,得到了一條和這幾個點擬合程度較好的線性模型。為了探究具體的實現,詳看一下幾個概念。
損失函數損失函數是用來評估模型的好壞,即模型預測值和真實值的誤差, 損失越小, 模型越好。We measure the "accuracy" of our hypothesis function by using a cost function
平方誤差函數 廣泛應用在 回歸的問題 square error function is commonly used for "regression" problems

目標是: 所有橘色線(讓黑色點和紅色點之間的線),即預測結果和實際結果間的誤差最小。
損失函數: 用於度量建模誤差的,為了得到誤差的最小值。統計學中通常使用平方誤差方法。
統計學中的平方誤差(損失)函數
梯度下降還會涉及到 特徵值縮放、均值歸一化處理等。這裡也不做過多擴展。
想象你在山頂上了,需要下山,有很多條道兒可以走。

簡單的例子,帶你了解梯度下降

過往實驗例子[4] 訓練模型不會以一個固定值來訓練,會開始步子大些,後續逐漸變小。
該例子通過圖像直觀說明學習率(步伐多大)對模型的影響 (eg: 收斂、欠擬合)。
梯度下降目的: 用來求解損失函數的最小值的方法。得到局部最優解的方法。

幫您簡單回憶一下,什麼是導數呢?導數是微小的變化量。


我們再來回顧下剛才的代碼例子。

當你走每一步,會調整下山步伐α 和方向 θθθ 的規劃
是不是看到這裡,發現模型的訓練,也沒有那麼難啦。
邏輯回歸在線性回歸模型中,我們了解到了模型、損失函數、梯度下降的含義。
邏輯回歸對我們理解NN 神經網絡有很大的幫助。
邏輯回歸的現實意義是分類問題。eg: 預測用戶是否喜歡該類視頻?預測該用戶是男還是女?
例如我們預測該圖片是否是只貓🐈:
預測的結果標識 / 邏輯回歸: θ,有多大的概率。

如果要實現上述例子,就需要明白邏輯回歸的模型。
除了sigmoid,還有一些其他方法例如 relu tanh,在NN中被使用。

邏輯回歸和線性回歸的損失函數是不同的。線性回歸損失函數(平方損失函數) 是在在滿足高斯分布 / 正態分布[5]的條件下推導得到的,而邏輯回歸假設樣本滿足伯努利分布[6]。故需要重新定義損失函數。
損失函數為: (是從 最大似然估計[7] 得來的)
簡單解釋下損失函數的含義:
預測結果只有 是和不是 兩種情況,即 或 。


有了損失函數的定義後,和線性回歸一樣的道理,我們需要計算出 損失函數 最小的時候 值。
梯度下降
邏輯回歸demo,感興趣可以去看看[8],跟線性回歸的套路是一樣的,建立模型,定義好損失函數,訓練數據不停對模型進行訓練處理,最後得到訓練好的模型。


我們大致了解了線性和邏輯回歸的模型,也理解了損失函數和梯度下降的意義。
但面對着日益複雜的情況,如此簡單的模型是無法滿足現實情況的。尤其當特徵值很多的時候,即 對計算是非常大的負荷。例如我們對一張圖片進行預測是否是車,如果該圖片像素是100*100 *3, 即有3w個特徵值,這顯然對計算來說是很不合理的。
這也就是為什麼,我們需要神經網絡NN,以及CNN、RNN 等這些更複雜的模型。
神經網絡學習資料: 3blue1brown-深度學習(英文搬運)_嗶哩嗶哩_bilibili[9]
什麼是神經網絡生物上的神經元,有輸入和輸出層,輸入層接受其他神經元的信息,輸出層以電脈衝的形式發給其他神經元。
當🧠大腦在思考的時候,一枚可愛的神經元在幹什麼? 每個樹突收到其他神經元發出的刺激脈衝後,當這些刺激脈衝疊加後,達到一定的強度閾值,就會產生動作電位,並沿着軸突發送電信號。故以此來不停的傳遞。
該過程可類比於有很多條水管(樹突),水管粗細不一,故輸入的流速也不一樣,開始放水(信號),當水桶里水足夠多並達到閾值的時候 (激活),會從右側軸突流出來。流出的水會再次流向下一個水桶。


來源: 來自google搜索圖
Neural Networks: 算法來模擬人的大腦。本質還是構建模型,並通過數學運算得到預測結果。人認識某個動物是大熊貓是一樣的,我們對熊貓的特徵認知,例如大熊貓只有黑白色、只在四川、只吃竹子等等。故對NN模型的訓練道理是一樣的。
NN 神經網絡是最基本的的算法模型,像深度學習的CNN 卷積神經網絡對圖像的處理;RNN 循環神經網絡對語言模型的研究等等,各種複雜的模型,都是基於NN拓展的。
神經網絡模型
層:
每一層都有很多個神經元 Neuron。對於一個神經元的結構如下:

一個神經元的模型
說明:
一個神經元內部計算:
是不是也不難看懂,其實每一個小的神經元,類似一個邏輯回歸。
通常對於激活函數 activation function,如圖上使用 sigmoid的使用,會使用Relu。
正向傳播創建模型,定義每層的結構,並以此往後傳遞。
簡單的理解是: 將多個邏輯回歸模型組合在一起。

我們建立一個簡單的NN模型,只有一個hidden layer,會有2個預測結果的輸出。
Eg: (只是個例子說明) 該模型是預測是貓還是狗,X 特徵值代表 毛髮、眼睛、鼻子、嘴巴,輸出層會判斷貓還是狗的概率更大些。
針對已經建立的模型,像邏輯回歸一樣,明確每一個神經元連接的信息。
例如 按照我們上面對一個神經元模型的創建,建立每個神經元的公式。
以下為了理解 激活函數 activation function用了 sigmoid function


正向傳播: 沿着從輸入層到輸出層,依次計算,並存儲神經網絡的中間變量。
此時,我們的目標值是每一層的 W 和 b。
反向傳播按照我們回歸模型的套路是,在已經創建好的模型基礎上,評估損失函數。
其實理解了邏輯回歸的損失函數,不難理解這個公式。
我們暫不去看正則化的處理 (正則化我的理解是: 向模型加入某些規則,加入先驗,縮小解空間,減小求出錯誤解的可能性)。NN損失函數的定義非常的明確,是每個分類的損失函數加和。


反向傳播算法的目的是: 計算每一層的參數 w b 對總損失函數的影響。

Repeat until converage
代碼: 用NN識別一隻🐈[11],以下為代碼片段。
上述,我只是簡單介紹了一點有關NN模型的基礎知識,實際上有關神經網絡的知識還很多。本次分享的初衷是通過一些對模型基礎的理解 + TensorFlow.js,前端同學也可以玩玩機器學習。
在我們的業務場景里,常見算法對業務賦能的場景,例如在出讀閱卷中的圖像識別 (eg: 對於一張試卷結構和標誌點等識別)。
參考資料機器學習、深度學習和強化學習的關係和區別是什麼? - 知乎: https://www.zhihu.com/question/279973545/answer/588124593
[2]DEEP REINFORCEMENT LEARNING.pdf: https://arxiv.org/pdf/1810.06339.pdf
[3]代碼: https://github.com/Linjiayu6/Tensorflow.js-LinearRegression/blob/master/src/tensorflow.js
[4]過往實驗例子: https://github.com/Linjiayu6/Machine-Learning-Practice/tree/master/Regression/logistic_regression
[5]高斯分布 / 正態分布: https://zh.wikipedia.org/wiki/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83
[6]伯努利分布: https://zh.wikipedia.org/wiki/%E4%BC%AF%E5%8A%AA%E5%88%A9%E5%88%86%E5%B8%83
[7]最大似然估計: https://zhuanlan.zhihu.com/p/26614750
[8]邏輯回歸demo,感興趣可以去看看: https://github.com/Linjiayu6/Deep-Learning/blob/master/coursera/L1_Neural%20Networks%20and%20Deep%20Learning/W2__Logistic%20Regression%20demo.ipynb
[9]學習資料: 3blue1brown-深度學習(英文搬運)_嗶哩嗶哩_bilibili: https://www.bilibili.com/video/BV1Et411779N?p=2
[10]偏移量增加的意義: https://www.zhihu.com/question/68247574
[11]代碼: 用NN識別一隻🐈: https://github.com/Linjiayu6/Deep-Learning/blob/master/coursera/L1_Neural%20Networks%20and%20Deep%20Learning/W2__Logistic%20Regression%20with%20a%20Neural%20Network%20mindset.ipynb
[12]兩層NN demo: https://github.com/Linjiayu6/Deep-Learning/blob/master/coursera/L1_Neural%20Networks%20and%20Deep%20Learning/W5__2-Layer__Deep%20Neural%20Network%20for%20Image%20Classification%20-%20Application.ipynb
❤️ 謝謝支持
以上便是本次分享的全部內容,希望對你有所幫助^_^
喜歡的話別忘了分享、點讚、收藏三連哦~。
歡迎關注公眾號ELab團隊收貨大廠一手好文章~
字節跳動校/社招內推碼:W7HD8A6
投遞鏈接: https://jobs.toutiao.com/s/dQ2dogm