• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 神經網絡的傳播

    上一篇文章構建了一個簡單的網絡,可以看出來它對于手寫數字的識別率還是可以高達91%。但我們尚未對神經網絡處理的過程做出太多解釋。

     

        數據在網絡中的傳播有兩種方式。一種是沿著輸入到輸出的路徑,被稱為前向傳播。一種是從輸出返回到輸入,被成為反向傳播(backprop)。

     

    train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
    sess.run(train_step, feed_dict={x: batch_xs, y: batch_ys})
    

    前文代碼節選

     

        當我們運行最小化loss的時候,為了求出loss的值,我們的數據會沿著我們構建的通道向前流動,逐步的求出每個節點。

     

    求值示意圖

     

        我們知道prediction是一個[1, 10]的矩陣,那么下標為i(即分類為i)的值是vi通過softmax函數之后得到的。vi為對應矩陣wi(形狀為[784, 1])乘以x,再加上對應bi。

        

    網絡前向傳播示意圖

        

        而反向傳播就是為了最小化loss求梯度的過程了。那什么是梯度?為什么選擇梯度下降法來更新權重?首先讓我們看下loss=f(w)可能的圖像:

     

    loss函數3D圖

     

        想到了什么?或許山脈是跟這圖像最相似的實體。那么如何求得使loss值最小的權重w?我們先聯想一下我們是如何求出一元函數的極小值的。我們可以通過求導得出斜率,當斜率為0時,則為極小值(不是很嚴謹)。

     

        

     

        從一元函數進入多元函數,導數變成了偏導數,發生變化的方向不再只是平面上唯一的x軸,而是立體的多軸。而不同方向的變化都有不同的導數,稱作方向導數。而梯度的定義:

     

        梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿著該方向取得最大值,即函數在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。

     

        假如有一個函數,z=f(x, y),那么z的梯度為:

     

       

    梯度的求解

     

        我們需要注意的是,z函數梯度的方向是z增加最快的方向。我們在深度學習里,需要降低loss,因此我們是選擇loss函數梯度的反方向!

     

        我們將loss對Wi(即W權重的某一個值)求導的過程:

     

     

        !!!但是我們是為了最小化loss,所以我們根據的應該是:

        

     

        所以,我們有:

        

        

     

        其中,α代表學習率。權重某個值的更新等于原來的值減去學習率乘以導數的值。梯度下降法的原理就是如此。可以看出來,如果靠我們自己去計算,那運算量是很大的。 

        

    VGG-56 在 CIFAR-10 數據集上構建的損失函數的 3D 架構。

      

        如上圖所示,loss函數是一個很錯綜復雜的結構,很多尖峰也很多低谷。

     

        CS231N(斯坦福公開課)這么描述過梯度下降。假設我們把loss對w的函數看成一個山谷。那么我們每次計算導數的操作就是在試探哪里是下降的方向,然后不斷的往下走,一直走到山底得到最好的w。

        

     

        那么一旦試探到下降的方向后,我們該走多遠,這就是學習率所決定的。

     

        學習率其實是很重要的一個參數。假如太小的話會導致訓練時間過長,因為你需要很久才能走到山底。假如太大,那么你很有可能跳過極小值,無法獲得較好的模型效果。

        

        來自:http://t.cn/RemjNXg

        

        三幅圖形象的說明了小球如果根據不同的學習率容易遇到的場景。中間的小球陷入了極小值,但無法到達最小值。后面會講到我們如何通過優化器來規避這種問題。

     

        所以很多時候我們都是先預設一個學習率,然后根據模型出來的效果如準確率等來調整。

     

        更詳細的內容因為篇幅問題會分別講解。如損失函數的選擇,優化器(雖然都是梯度下降,但是方式不同)的選擇,學習率,權重的初始化。

     

        PS:如果數學公式錯了請指正。

    版權聲明:本文為qq_40213457原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_40213457/article/details/81988483

    智能推薦

    BP神經網絡-前向傳播

    前言 回顧 前向傳播 前言 本文是接著上一文多層感知機所寫的。上一文說的了如何初始化一個MLP。本文簡單介紹一下前向傳播的概念以及代碼實現。 上文:http://blog.csdn.net/skullfang/article/details/78609851 回顧 還是從一個簡單的多層感知器入手,這個感知器只有兩層(輸入層不算)。輸入層——隱藏層——...

    神經網絡——梯度下降&反向傳播

    前言 本篇是根據上一篇博文《神經網絡–前向傳播》續寫的。 http://blog.csdn.net/skullFang/article/details/78620456 本文中的數學知識有點,需要一點微分的知識。(會求導)就可以。 基本概念 在上文我們已經知道了什么是前向傳播。就是當前層的輸入是上一層的輸出,當前層的輸出是下一層的輸入。然后一層一層的傳遞下去。 反向傳播也叫反向更新。根...

    神經網絡反向傳播numpy實現

    一、任務 實現一個4 層的全連接網絡實現二分類任務,網絡輸入節點數為2,隱藏層的節點數設計為:25,50,25,輸出層2 個節點,分別表示屬于類別1 的概率和類別2 的概率,如圖所示。我們并沒有采用Softmax 函數將網絡輸出概率值之和進行約束,而是直接利用均方差誤差函數計算與One-hot 編碼的真實標簽之間的誤差,所有的網絡**函數全部采用Sigmoid 函數,這些設計都是為了能直接利用梯度...

    實例分析神經網絡傳播過程

    神經網絡簡介 博客主要內容 神經網絡框架 神經網絡前向傳播實例 神經網絡反向傳播實例 總結 引用 一.神經網絡簡介 今天,神經網絡(nerual networks)已經是一個相當大的、多學科交叉的學科領域[1]。它不能用簡單的用“一個算法”,“一個框架”,來總結它的內容。從早期神經元(neuron),到感知器(Perceptron),再到Bp神經網絡...

    神經網絡反向傳播算法

    四個基本等式 證明 算法 代碼...

    猜你喜歡

    神經網絡前向傳播算法

         神經網絡可以通過輸入的特征向量經過層層推導得到最終輸出,并通過這些輸出結果來解決分類或者回歸問題。實際上,神經網絡是采用前向傳播算法實現層層推導的。      神經網絡的前向傳播結果需要三部分信息。第一,神經網絡的輸入,即從實體中提取的特征向量;第二,神經網絡的連接結構,其會給出不同神經元之間輸入輸出的連接關系,神經網絡結構中每...

    numpy實現神經網絡-反向傳播

    參考鏈接: https://www.jianshu.com/p/964345dddb70 https://www.cnblogs.com/jsfantasy/p/12177216.html 花了一天學習反向傳播,記錄一下,以便后面回顧。 反向傳播概念:前向傳遞輸入信號直至輸出產生誤差,反向傳播誤差信息更新權重矩陣。類似于反饋系統,通過輸出來影響網絡各個層的權值和偏置。 數學約定: 按照圖示數學符號...

    神奇的Batch Normalization 如果一個模型僅訓練BN層會是什么樣的

    您可能會感到驚訝,但這是有效的。 ? 最近,我閱讀了arXiv平臺上的Jonathan Frankle,David J. Schwab和Ari S. Morcos撰寫的論文“Training BatchNorm and Only BatchNorm: On the Expressive Power of Random Features in CNNs”。 這個主意立刻引起了...

    用Python實現校園通知更新提醒

    前言 這個項目實已經在一個月前已經完成了,一直都想寫一篇博客來總結這個過程中遇到的一些問題。但最近一個月來都比較忙,所以一直拖到了現在。 首先說說起因吧,我沒事的時候,總喜歡依次點開學校主頁、教務處、圖書館以及學院的網站,看看有沒有什么新通知,雖然大多與我無關。恰逢最近正在學Python,經常聽到別人說用Python寫爬蟲很簡單,但自己尚未接觸過爬蟲。于是抱著試一試的心態看了幾篇關于Python爬...

    spring_ioc相關_第一章

    1 spring是一站式框架,在javaee的三層結構中,每一層都提供不提并的解決技術 web層:springMVC service層:spring的ioc dao層:spring的jdbcTemplate 2 javaee為避免兩個類之間出現耦合,則把對象的創建交給spring進行管理,spring的ioc操作:(1)ioc的配置文件方式;(2)ioc注解方式 3 ioc的底層原理使用技術(1)...

    精品国产乱码久久久久久蜜桃不卡