機器學習的步驟
1.定義帶有未知參數的函數
線性模型(linear models)具有較大的限制(Model Bias)
? ? ? ? y = b + wx
無論如何更改b或者w,其只會呈現出一條直線,不能滿足更加復雜的現實情況。
我們可以將復雜的函數(分段函數)看作:常數(其大小為實際函數與Y軸的交點)+激活函數(在小于某個數值時,為某個常數,在大于某個數值時,為某個常數)
紅色為Piecewise Linear Curves(分段函數),藍色為Hard Sigmoid(激活函數)
第一激活函數的轉折點設在實際函數的第一個轉角。分段函數的斜率與實際函數的斜率相同。同理第二個激活函數的轉折點設為實際函數的第二個轉角處,斜率相同......
最終實際函數等于f0+f1+f2+f3?
有多個線段組成的函數稱為Piecewise Linear Curves(分段函數),其都可以通過上面的方法組合出來。其轉折的次數越多,需要的藍色函數也越多。
在曲線問題上,我們可以通過微分的思想,在曲線上取足夠多的點,以直代曲,這樣就可以用直線來逼近這條連續的曲線。
所以可以通過分段函數去逼近任何連續的曲線。
激活函數可以使用一段S型曲線(sigmoid funcation)來逼近它
可以簡寫為:y = c sigmoid(b+wx1)
通過不斷調整b、w和c來制造出不同的S型曲線
前面所求的分段函數就是多個激活函數累加之后的結果
i代表激活函數(藍色函數),j代表特征的編號(如j = 10,則取前十天的樣本進行計算)
wij代表在第i個激活函數里面的第j個特征的權重
其中r1、r2 和r3可以簡化為矩陣與向量的加法和乘法:
所以
就可以寫成
其中x是輸入的特征,灰色的b是標量,w為矩陣,和綠色的b是向量
將所有的未知參數進行拆分,拼成一個很長的向量統稱為
2.定義來自訓練數據中的損失函數
擁有了新的模型之后,Loss與之前的定義方法還是一樣的,只是符號更改了一下,變為:????????
? ? ? ? L(w,b) ====> L()? 用
來代表所有的未知參數
損失函數(Loss function)所作的事情就是,當為某一個數值的時候,會有多好還是有多不好
計算方法與只有兩個參數的時候類似,假設給定一個值,再輸入一個x,查看估算的y值,計算與真實的
(label)之間的差距,以此類推。把所有的誤差加起來就得到了Loss
3.最佳化問題
optimization的演算法還是gradient descent。
尋找一組讓Loss最小,將這一組
稱之
*。
尋找*:
1.隨機選一個初始值0
2.計算微分,對每一個未知的參數都去計算起對L的微分,之后把微分集合起來組成一個向量g(gradient)。
通常的表示方法:,其中倒三角形的意思是把所有的參數
1、
2、
3等對L做微分,算微分的
值為
0。
3.更新參數列表
其中兩式相減是因為梯度的方向式函數增長最快的方向,朝著負方向式下降最快的方向。
重復以上的步驟,不斷更新,直至不想繼續更新或者得出
?= 0。
在實際操作中,不是使用全部的數據去計算Loss,而是將數據分為多個batch(批)。多次進行計算,算出L1、L2、L3等,之后計算出gradient。
一次查看所有批次稱之為一次epoch,epoch指的是整個訓練數據集通過神經網絡一次的過程。?每一次更新參數稱之為update。、
所以一個epoch并不是更新參數一次。更新次數由batch size決定
例如:
ReLU(另外一種激活函數)
hard sigmoid可以看作式兩個rectifier linear unit的疊加。
ReLU比Sigmoid更優。
Sigmoid或者ReLU等可以叫作Neuron,很多的Neuron可以叫作Neuron Network
過擬合(Overfitting)?
指的是在已知的訓練資料上變好,而在未知的訓練資料上沒有變好。