神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)中的一個(gè)模型,可以用于兩類問題的解答:
- 分類:把數(shù)據(jù)劃分成不同的類別
- 回歸:建立數(shù)據(jù)間的連續(xù)關(guān)系
感知器技巧 - 計(jì)算機(jī)如何“學(xué)習(xí)”分類?
整個(gè)數(shù)據(jù)集中的每一個(gè)點(diǎn)都會(huì)把分類的結(jié)果提供給感知器(分類函數(shù)),并調(diào)整感知器?!@就是計(jì)算機(jī)在神經(jīng)網(wǎng)絡(luò)算法中,找尋最優(yōu)感知器的原理。
誤差函數(shù)
因?yàn)檎`差暗示了如何進(jìn)行正確的分類,因此誤差的定義就變得尤為重要,這也被稱為誤差函數(shù)。
誤差函數(shù)與梯度下降
用什么作為誤差函數(shù)比較合適?
用什么方式可以很好地告訴計(jì)算機(jī)當(dāng)前的誤差是多少?
如何定義誤差函數(shù)?
誤差函數(shù)提供給我們的預(yù)測(cè)值與實(shí)際值之間的差異,但是這個(gè)差異如何指導(dǎo)我們權(quán)重的更新呢?我們的目標(biāo)是找到最小的誤差函數(shù)值來找到與實(shí)際值誤差最小的預(yù)測(cè)值。
在簡(jiǎn)單的線性方程中,我們可以通過判斷“預(yù)測(cè)值與實(shí)測(cè)值相比是大了還是小了”來決定權(quán)重是增加還是減少。但是在更為復(fù)雜的非線性環(huán)境中呢?復(fù)雜的數(shù)學(xué)問題,我們就直接來看看學(xué)者們的解決策略。
假設(shè)一維問題是一條直線,那么二維問題就是一個(gè)平面,而三維問題就是一個(gè)曲面。曲面可以理解為有山峰也有低谷的地面,誤差最小的地方就是低谷處,我們希望計(jì)算機(jī)找到的就是這個(gè)低谷的值。為了找到這個(gè)低谷,學(xué)者們發(fā)明了梯度下降。
離散型(Discrete)與連續(xù)型(Continuous)預(yù)測(cè)
對(duì)于優(yōu)化而言,連續(xù)型誤差函數(shù)比離散型函數(shù)更好。為此,我們需要從離散型預(yù)測(cè)變成連續(xù)型預(yù)測(cè)。
sigmoid函數(shù)
多類別分類和 Softmax
函數(shù)Softmax(x)是一個(gè)non-linearity,但它的特殊之處在于它通常是網(wǎng)絡(luò)中的一次操作,這是因?yàn)樗邮芰艘粋€(gè)實(shí)數(shù)向量并返回一個(gè)概率分布,其定義如下,定義x是一個(gè)實(shí)數(shù)的向量(正數(shù)或負(fù)數(shù)都無所謂,沒有限制)。然后,第i個(gè)Softmax(x)的組成是
輸出是一個(gè)概率分布:每個(gè)元素都是非負(fù)的,并且所有元素的總和都是1。
- (1)輸出層輸出之和為 1,因?yàn)檩敵鰧拥妮敵鲋蜑?,其中一項(xiàng)增加,其他所有項(xiàng)則會(huì)相應(yīng)減少。
- (2)輸出層全部輸出均為正。
log_softmax
在softmax的結(jié)果上再做多一次log運(yùn)算
最大似然率(Maximum Likelihood)
NLLLoss
negative log likelihood loss
交叉熵 (Cross-Entropy)-損失函數(shù)
交叉熵
我們遇到了某種規(guī)律,概率和誤差函數(shù)之間肯定有一定的聯(lián)系,這種聯(lián)系叫做交叉熵。這個(gè)概念在很多領(lǐng)域都非常流行,包括機(jī)器學(xué)習(xí)領(lǐng)域。
交叉熵可以告訴我們模型的好壞。

多類別交叉熵

Logistic 回歸
所有機(jī)器學(xué)習(xí)的基石——對(duì)數(shù)幾率回歸算法?;旧鲜沁@樣的:
- 獲得數(shù)據(jù)
- 選擇一個(gè)隨機(jī)模型
- 計(jì)算誤差
- 最小化誤差,獲得更好的模型
- 完成!
計(jì)算誤差函數(shù):所有點(diǎn)的誤差函數(shù)之和的平均值


最小化誤差函數(shù)
梯度下降
梯度下降算法背后的準(zhǔn)則和數(shù)學(xué)原理。

梯度計(jì)算
s型函數(shù)
的倒數(shù):

現(xiàn)在,如果有 m 個(gè)樣本點(diǎn),標(biāo)為, 誤差公式是:
預(yù)測(cè)是.
我們的目標(biāo)是計(jì)算在單個(gè)樣本點(diǎn) x 時(shí)的梯度(偏導(dǎo)數(shù)),其中 x 包含 n 個(gè)特征,即
。
為此,首先我們要計(jì)算 .
, 因此:

最后一個(gè)等式是因?yàn)楹椭械奈ㄒ环浅A宽?xiàng)相對(duì)于 正好是
, 明顯具有導(dǎo)數(shù)
.
現(xiàn)在可以計(jì)算

類似的計(jì)算將得出:(備注:下圖公式缺少一個(gè)負(fù)號(hào),且其為 m 個(gè)樣本點(diǎn)時(shí)的公式)
【針對(duì)單個(gè)樣本點(diǎn)時(shí),E 對(duì) b 求偏導(dǎo)的公式為:】

這個(gè)實(shí)際上告訴了我們很重要的規(guī)則。對(duì)于具有坐標(biāo), 的點(diǎn),標(biāo)簽
, 預(yù)測(cè)
, 該點(diǎn)的誤差函數(shù)梯度是
,
,
,
.
總之
.
如果思考下,會(huì)發(fā)現(xiàn)很神奇。梯度實(shí)際上是標(biāo)量乘以點(diǎn)的坐標(biāo)!什么是標(biāo)量?也就是標(biāo)簽和預(yù)測(cè)之間的差別。這意味著,如果標(biāo)簽與預(yù)測(cè)接近(表示點(diǎn)分類正確),該梯度將很小,如果標(biāo)簽與預(yù)測(cè)差別很大(表示點(diǎn)分類錯(cuò)誤),那么此梯度將很大。請(qǐng)記下:小的梯度表示我們將稍微修改下坐標(biāo),大的梯度表示我們將大幅度修改坐標(biāo)。
如果覺得這聽起來像感知器算法,其實(shí)并非偶然性!
梯度下降算法推導(dǎo)與實(shí)現(xiàn)

實(shí)現(xiàn)基本函數(shù)
Sigmoid 激活函數(shù)
輸出(預(yù)測(cè))公式
誤差函數(shù)
更新權(quán)重的函數(shù)
==============================================
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
輸入層: 包含了輸入數(shù)據(jù)
如果輸入層有更多的節(jié)點(diǎn),那么意味著處理的是更多維的數(shù)據(jù)。通常,如果輸入層里有n個(gè)節(jié)點(diǎn),那么處理的就是n維空間的數(shù)據(jù)。-
隱藏層:針對(duì)輸入層的一系列模型
如果有多個(gè)隱藏層,那么就形成了深度神經(jīng)網(wǎng)絡(luò)。
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)_隱藏層.png 輸出層:
如果輸出層有多個(gè)節(jié)點(diǎn),則意味著有多個(gè)輸出。這就是有多種類別的分類模型。
多層級(jí)
并非所有神經(jīng)網(wǎng)絡(luò)都看起像上面的那樣??赡軙?huì)復(fù)雜的多!尤其是,我們可以執(zhí)行以下操作:
- 向輸入、隱藏和輸出層添加更多節(jié)點(diǎn)。
- 添加更多層級(jí)。
多類別分類
前向反饋
前向反饋是神經(jīng)網(wǎng)絡(luò)用來將輸入變成輸出的流程。
誤差函數(shù)
和之前一樣,神經(jīng)網(wǎng)絡(luò)將產(chǎn)生誤差函數(shù),最終我們需要最小化該誤差函數(shù)。
反向傳播
一個(gè)層級(jí)的所有輸出變成下一層級(jí)神經(jīng)元的輸入。這一流程叫做前向傳播(forward propagation)。
我們?cè)谏窠?jīng)網(wǎng)絡(luò)中使用權(quán)重將信號(hào)從輸入層傳播到輸出層。我們還使用權(quán)重將錯(cuò)誤從輸出層傳播回網(wǎng)絡(luò),以便更新權(quán)重。這叫做反向傳播(backpropagation)。
反向傳播將包括:
- 進(jìn)行前向反饋運(yùn)算。
- 將模型的輸出與期望的輸出進(jìn)行比較。
- 計(jì)算誤差。
- 向后運(yùn)行前向反饋運(yùn)算(反向傳播),將誤差分散到每個(gè)權(quán)重上。
- 更新權(quán)重,并獲得更好的模型。
繼續(xù)此流程,直到獲得很好的模型。
鏈?zhǔn)椒▌t
鏈?zhǔn)椒▌t用于計(jì)算導(dǎo)數(shù)。

