【深度學(xué)習(xí)DL】一、神經(jīng)網(wǎng)絡(luò)

神經(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ù)
{\sigma(x)} = {1 \over {1+{e^{-x}} }}

多類別分類和 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)的組成是
{softmax(x_i)= {exp{(x_i)}\over{\sum_k^nexp{(x_k)}} } }

輸出是一個(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)域。

交叉熵可以告訴我們模型的好壞。


Cross-Entropy-Formula.png

多類別交叉熵

Multi-Class_Cross-Entropy多類別交叉熵.png

Logistic 回歸

所有機(jī)器學(xué)習(xí)的基石——對(duì)數(shù)幾率回歸算法?;旧鲜沁@樣的:

  • 獲得數(shù)據(jù)
  • 選擇一個(gè)隨機(jī)模型
  • 計(jì)算誤差
  • 最小化誤差,獲得更好的模型
  • 完成!

計(jì)算誤差函數(shù):所有點(diǎn)的誤差函數(shù)之和的平均值

計(jì)算誤差函數(shù).png

計(jì)算誤差函數(shù)02.png
最小化誤差函數(shù)

梯度下降

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


梯度下降01.png

梯度計(jì)算

s型函數(shù)
{\sigma(x)} = {1 \over {1+{e^{-x}} }}
的倒數(shù):
{σ^\prime(x)=σ(x)(1?σ(x))}

s型函數(shù)的導(dǎo)數(shù).png

現(xiàn)在,如果有 m 個(gè)樣本點(diǎn),標(biāo)為{x^{(1)}, x^{(2)}, \ldots, x^{(m)}, x (1),x (2),…,x (m)}, 誤差公式是:
{E = -\frac{1}{m} \sum_{i=1}^m \left( y^{(i)} \ln(\hat{y^{(i)}}) + (1-y^{(i)}) \ln (1-\hat{y^{(i)}}) \right) }

預(yù)測(cè)是{ \hat{y^{(i)}} = \sigma(Wx^{(i)} + b)}.

我們的目標(biāo)是計(jì)算{ E}在單個(gè)樣本點(diǎn) x 時(shí)的梯度(偏導(dǎo)數(shù)),其中 x 包含 n 個(gè)特征,即 {x = (x_1, \ldots, x_n)}。

{ \nabla E =\left(\frac{\partial}{\partial w_1}E, \cdots, \frac{\partial}{\partial w_n}E, \frac{\partial}{\partial b}E \right) }

為此,首先我們要計(jì)算 {\frac{\partial}{\partial w_j} \hat{y}} .

{\hat{y} = \sigma(Wx+b)}, 因此:

梯度計(jì)算02.png

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

現(xiàn)在可以計(jì)算 {\frac {\partial} {\partial w_j} E}

梯度計(jì)算03.png

類似的計(jì)算將得出:(備注:下圖公式缺少一個(gè)負(fù)號(hào),且其為 m 個(gè)樣本點(diǎn)時(shí)的公式)

【針對(duì)單個(gè)樣本點(diǎn)時(shí),E 對(duì) b 求偏導(dǎo)的公式為:{ \frac {\partial} {\partial b} E=-(y -\hat{y}) }

梯度計(jì)算04.png

這個(gè)實(shí)際上告訴了我們很重要的規(guī)則。對(duì)于具有坐標(biāo){ (x_1, \ldots, x_n)}, 的點(diǎn),標(biāo)簽{ y}, 預(yù)測(cè){ \hat{y}}, 該點(diǎn)的誤差函數(shù)梯度是{ (-(y - \hat{y})x_1}, {\cdots}, {-(y - \hat{y})x_n}, {-(y - \hat{y}) )}.
總之

{\nabla E(W,b) = -(y - \hat{y}) (x_1, \ldots, x_n, 1)}.

如果思考下,會(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).png
實(shí)現(xiàn)基本函數(shù)
  • Sigmoid 激活函數(shù)
    \sigma(x) = \frac{1}{1+e^{-x}}

  • 輸出(預(yù)測(cè))公式
    \hat{y} = \sigma(w_1 x_1 + w_2 x_2 + b)

  • 誤差函數(shù)
    Error(y, \hat{y}) = - y \log(\hat{y}) - (1-y) \log(1-\hat{y})

  • 更新權(quán)重的函數(shù)
    w_i^{'} \longleftarrow w_i + \alpha (y - \hat{y}) x_i

b^{'} \longleftarrow b + \alpha (y - \hat{y})

==============================================

神經(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ù)。


反向傳播
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容