1. 程式人生 > >全面直觀認識深度神經網路

全面直觀認識深度神經網路

作者:石文華

編輯:趙一帆

01

深度學習的精準定義

 一類通過多層非線性變換對高複雜性資料建模演算法的集合。它的兩個非常重要的特徵是多層性和非線性。俗稱多層非線性變換。所以深度學習要去線性化。

為什麼呢?因為線性模型存在侷限性,任意線性模型得到組合仍然還是線性模型。所以只要通過線性變換,任意層的全連線神經網路和單層神經網路模型的表達能力沒有任何區別,而且他們都是線性模型,線性模型解決問題的能力是有限的。

02

啟用函式實現去線性化

        每個神經元(也就是神經網路上的節點)的輸出通過一個非線性函式,那麼整個神經網路的模型也就不再是線性的了,這個非線性函式就是啟用函式。

tensorflow常見的啟用函式有:

tf.nn.relutf.sigmoidtf.tanh

tensorflow 也支援自定義啟用函式。

帶啟用函式的前向傳播演算法:

a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)

03

單層神經網路解決不了的問題

事實上,一個單極網路可以將平面劃分為兩部分,用多個單極網路組合在一起,並用其中的一個區綜合其他單極網路的結果,就可以構造出一個兩極神經網路。

04

組合特徵提取

深度神經網路具有組合特徵提取的功能,這個特徵對於不易提取特徵向量的問題(比如圖片識別和語音識別等)有很大的幫助。隱藏層的主要作用

也就是隱藏層節點可以被認為代表了從輸入特徵中抽取更高緯度的特徵。

05

損失函式

損失函式用於評價模型的效果。分類問題使用最廣泛的損失函式是交叉熵

交叉熵

        刻畫兩個概率分佈的距離,也就是說交叉熵越小兩個概率分佈越接近。

交叉熵的數學定義是:

        其用來衡量在給定真實分佈下,使用非真實分佈所指定的策略消除系統不確定性所需付出的努力的大小。

神經網路的輸出不一定是概率模型,可以使用Softmat迴歸將神經網路的前向傳播的結果變成概率分佈。

程式碼例項:

cross_entropy = -tf.reduce_mean(
y_ * tf.log(tf.clip_by_value(y,
1e-10, 1.0)

        但是交叉熵一般會和softmax迴歸一起使用,所以會使用tf.nn.softm

cross_entropy=
tf.nn.softmax_cross_entropy_with_logits(y,y_)

y代表原始神經網路的輸出結果,而y_給出了標準答案。

在只有一個正確答案的分類問題中,Tensorflow提供了函式:

tf.nn.sparse_softmax_cross_entropy_with_logits

來加快計算過程。

 迴歸問題常用的損失函式是均方誤差均方誤差是指各資料偏離真實值的距離平方和的平均數。

06

神經網路的優化演算法

梯度下降演算法主要用於優化單個引數的取值,而反向傳播演算法則給出了一個高效的方式在所有引數上使用梯度下降演算法,從而使神經網路模型在訓練資料集上的損失函式儘可能的小。

反向傳播演算法是訓練神經網路的核心演算法。它可以根據定義好的損失函式優化神經網路中引數的取值,從而使神經網路模型在訓練資料集上的損失函式達到一個較小的值。

神經網路模型中引數的優化過程直接決定了模型的質量。

07

什麼是梯度和學習率

梯度:

由導數的概念,對點x0的導數反應了函式在點x0出的瞬時變化速率,或者叫做點x0出的斜度。推廣到多維函式中,就有了梯度的概念,梯度是一個向量的組合,反應了多維圖形中變化速率最快的反向。

學習率:

每次引數移動的幅度。

08

神經網路的優化過程

神經網路的優化過程分為兩個階段:

        1、先通過神經網路的前向傳播演算法計算得到預測值,並將預測值和真實值做對比得出兩者之間的差距。

        2、通過反向傳播演算法計算損失函式對每個引數的梯度,再根據梯度和學習率使用梯度下降演算法更新每一個引數。

        梯度下降演算法並不能保證被優化的函式達到全域性最優解,可能只得到區域性最優解,只有損失函式是凸函式才能保證達到全域性最優解。

        結合梯度下降演算法和隨機梯度下降演算法的優缺點,這裡採用一小部分資料(batch)來進行梯度下降,所以神經網路的訓練過程大致如下:

0?wx_fmt=png

09

學習率的設定

在訓練神經網路時,需要設定學習率控制引數更新的速度,學習率決定引數每次更新的幅度,如果幅度過大,可能導致引數在極優值的兩側來回移動,如果幅度過小,雖然能保證收斂性,但是會大大降低優化速度。所以學習率不能過大也不能過小。

指數衰減法設定學習率:

tf.train.exponential_decay()

實現了指數衰減學習率,通過這個函式,可以先使用較大的學習率快速得到一個比較優的解,然後隨著迭代的繼續逐步減小學習率,使得模型訓練後期更加穩定。例項程式碼:

0?wx_fmt=png

上述程式碼設定了初始的學習率為0.1,因為指定了staircase=True,所以每次訓練100輪後學習率乘以0.96。

10

過擬合問題

舉幾個例子:

        1、過擬合就是你想多了,欠擬合就是你太天真。

        2、中國著名電腦科學家,中國機器學習之父,被業內尊稱為中國圖靈的魯迅先生曾經描述過一個名為「中國人」的機器學習演算法,在影象識別上嚴重的過擬合問題。其原文如下:

        一見短袖子,立刻想到白臂膊,立刻想到全裸體,立刻想到生殖器,立刻想到性交,立刻想到雜交,立刻想到私生子。中國人的想像惟在這一層能夠如此躍進。《而已集·小雜感》

        3、遇到幾個渣男就得出結論“男人沒一個好東西”。

        4、舉個物理學上的段子(轉自他人博文),費米的話就是一個非常直觀的理解:

        1953年春天,戴森和自己的學生利用贗標介子理論計算了介子與質子的散射截面,得到了與費米的實驗觀測值十分相符的結果。然而該理論需要4個自由引數,費米很不屑,講了一句日後很著名的話:“我記得我的朋友約翰·馮·諾依曼(John von Neumann)曾經說過,用四個引數我可以擬合出一頭大象,而用五個引數我可以讓它的鼻子擺動。”

        有趣的是,2010年6月,尤根·邁爾(Jurgen Mayer)等三位德國分子生物學家在《美國物理學期刊》(American Journal of Physics)發表了題為“用四個復引數畫出一頭大象”的論文。他們發現,利用四個復引數可以大致勾勒出大象的形態,再引入一個復引數則可以讓大象的鼻子擺動起來。

        5、直觀圖:

0?wx_fmt=jpeg

過擬合:

        當一個模型過為複雜之後,它可以很好的“記憶”每一個訓練集上的隨機噪聲的部分而忘記要去“學習”訓練資料中通用的趨勢。

過擬合主要有兩個原因造成:資料太少+模型太複雜

奧斯姆剃刀:

        這個原理稱為“如無必要,勿增實體”,即“簡單有效原理”。正如他在《箴言書注》2卷15題說“切勿浪費較多東西去做,用較少的東西,同樣可以做好的事情。”

解決過擬合問題:

        增加資料,減少特徵(特徵提取),交叉驗證,正則化。

正則化:

        避免過擬合問題最常用的方法,它的思想是在損失函式中加入刻畫模型複雜度的指標。

        一般來說模型的複雜度由權重w決定,刻畫模型複雜度的函式R(w)有兩種,L1正則化和L2正則化。

        L1:R(w)=∑∣Wi∣;L2:R(w)=∑(∣Wi∣*∣Wi∣)

L1和L2正則化的差別很大:

        L1正則化會讓引數變得更加稀疏,達到類似特徵提取的功能,以及不可導,但是L2則相反。

11

滑動平均模型

        在採用隨機梯度下降演算法訓練神經網路時,使用 tf.train.ExponentialMovingAverage 滑動平均操作的意義在於提高模型在測試資料上的健壯性(robustness)。

tf.train.ExponentialMovingAverage需要提供一個衰減率(decay)。該衰減率用於控制模型更新的速度。該衰減率用於控制模型更新的速度。

        ExponentialMovingAverage 對每一個(待更新訓練學習的)變數(variable)都會維護一個影子變數(shadow variable)。影子變數的初始值就是這個變數的初始值。

shadow_variable=

    decay×shadow_variable+(1−decay)×variable

        由上述公式可知, decay 控制著模型更新的速度,越大越趨於穩定。實際運用中,decay 一般會設定為十分接近 1 的常數(0.99或0.999)。所有需要計算滑動平均的變數必須是實數型。

程式碼示例:

0?wx_fmt=png

往期精彩文章(單擊就可檢視):

0?wx_fmt=gif 0?wx_fmt=gif

掃描燕哥微訊號,

拉你進機器學習大牛群。

福利滿滿,名額已不多…

0.jpeg

80%的AI從業者已關注我們微信公眾號

0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif

0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif 0?wx_fmt=gif


相關推薦

全面直觀認識深度神經網路

作者:石文華 編輯:趙一帆 01 深度學習的精準定義  一類通過多層非線性變換對高複雜性資料建模演算法的集合。它的兩個非常重要的特徵是多層性和非線性。俗稱多層非線性變換。所以深度學習要去線性化。 為什麼呢?因為線性模型存在侷限性,任意線性模型得到組合仍然還是線性模型。所以只要通過線性變換,任意層的全連線神

深度學習】全面直觀認識深度神經網路

01深度學習的精準定義  一類通過多層非線性變換對高複雜性資料建模演算法的集合。它的兩個非常重要的特徵是多層性和非線性。俗稱多層非線性變換。所以深度學習要去線性化。 為什麼呢?因為線性模型存在侷限性,任意線性模型得到組合仍然還是線性模型。所以只要通過線性變換,任意層的全連

【火爐煉AI】深度學習003-構建並訓練深度神經網路模型

【火爐煉AI】深度學習003-構建並訓練深度神經網路模型 (本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 ) 前面我們講解過單層神經網路模型,發現它結構簡單,難以解決一些實際的比較複雜的問題,故而現

#####好好好好####Keras深度神經網路訓練分類模型的四種方法

Github程式碼: Keras樣例解析 歡迎光臨我的部落格:https://gaussic.github.io/2017/03/03/imdb-sentiment-classification/ (轉載請註明出處:https://gaussic.github.io) Keras的官方E

估算深度神經網路的最優學習率

學習率如何影響訓練? 深度學習模型通常由隨機梯度下降演算法進行訓練。隨機梯度下降演算法有許多變形:例如 Adam、RMSProp、Adagrad 等等。這些演算法都需要你設定學習率。學習率決定了在一個小批量(mini-batch)中權重在梯度方向要移動多遠。 如果學習率很低,訓練會變得更

深度學習資料整理(深度神經網路理解)

https://blog.csdn.net/tiandijun/article/details/25192155   近這兩年裡deep learning技術在影象識別和跟蹤等方面有很大的突破,是一大研究熱點,裡面涉及的數學理論和應用技術很值得深入研究,這系列部落格總結了

深度神經網路的多工學習概覽(An Overview of Multi-task Learning in Deep Neural Networks)

譯自:http://sebastianruder.com/multi-task/ 1. 前言 在機器學習中,我們通常關心優化某一特定指標,不管這個指標是一個標準值,還是企業KPI。為了達到這個目標,我們訓練單一模型或多個模型集合來完成指定得任務。然後,我們通過精細調參,來改進模型直至效能不再

基於深度神經網路的說話人嵌入式端到端揚聲器驗證

DEEP NEURAL NETWORK-BASED SPEAKER EMBEDDINGS FOR END-TO-END SPEAKER VERIFICATION 基於深度神經網路的說話人嵌入式端到端揚聲器驗證   David Snyder *,Pegah Ghahremani,

一種利用語音深度神經網路進行語音識別的新方案

A NOVEL SCHEME FOR SPEAKER RECOGNITION USING A PHONETICALLY-AWARE DEEP NEURAL NETWORK Yun Lei Nicolas Scheffer Luciana Ferrer Mitchell McLaren 美國加

深度神經網路,適用於小型指令碼文字相關的語音驗證

DEEP NEURAL NETWORKS FOR SMALL FOOTPRINT TEXT-DEPENDENT SPEAKER VERIFICATION d-ivector系統優於i-ivector系統。 我們還嘗試了DNN培訓的不同配置。如果沒有maxo

【電腦科學】【2016】【含部分原始碼】深度神經網路及其實現

本文為捷克布拉格查理大學(作者:Bc. Ján Vojt)的碩士論文,共104頁。 深度神經網路是一種有效且通用的模型,能夠完成各種各樣的任務。本文主要研究了三種不同型別的深度神經網路——多層感知器、卷積神經網路和深度置信網路。所有討論的網路模型都是在並行硬體上實現的,並且針對網路

深度神經網路-keras-調參經驗

keras搬磚系列-調參經驗 1,觀察loss勝於觀察準確率,loss設計要比較合理,對比訓練集和驗證集的loss 2,relu可以很好的防止梯度彌散的問題,當然最後一層啟用函式儘量別用relu,如果分類則用softmax 3,BatchNorm 可以大大加快訓練速度和模型的

對基於深度神經網路的Auto Encoder用於異常檢測的一些思考

一、前言     現實中,大部分資料都是無標籤的,人和動物多數情況下都是通過無監督學習獲取概念,故而無監督學習擁有廣闊的業務場景。舉幾個場景:網路流量是正常流量還是攻擊流量、視訊中的人的行為是否正常、運維中伺服器狀態是否異常等等。有監督學習的做法是給樣本標出label,那麼標

基於深度神經網路的embeddding來構建推薦系統

在之前的部落格中,我主要介紹了embedding用於處理類別特徵的應用,其實,在學術界和工業界上,embedding的應用還有很多,比如在推薦系統中的應用。本篇部落格就介紹瞭如何利用embedding來構建一個圖書的推薦系統。 本文主要譯自《Building a Recommendation S

深度神經網路搭建馬賽克神器,高清無碼效果感人

目錄 專案背景 適用範圍 使用方法 專案背景 相信一提起馬賽克這個東西,不少小夥伴都痛心疾首,雖然最近幾年也頻繁傳出有在研發去除馬賽克的軟體,一直沒有成品問世。不過最近一位程式設計師及經過不斷努力終於完成了這款軟體。 據悉這位程式設計師“deeppomf

神經網路6_CNN(卷積神經網路)、RNN(迴圈神經網路)、DNN(深度神經網路)概念區分理解

 sklearn實戰-乳腺癌細胞資料探勘(部落格主親自錄製視訊教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm

深度神經網路優化論文總結

1、HanS, Mao H, Dally W J. Deep Compression: Compressing Deep NeuralNetworks with Pruning, Trained Quantization and Huffman Coding[J].Fiber, 2015,

深度神經網路

深度神經網路 摘要:深度學習是近年來計算機人工智慧領域非常火的研究方向,其相比傳統的淺層機器學習而言能夠挖掘出更多隱含的特徵。深度學習現如今已經廣泛的應用與計算機視覺、自然語言處理等領域,因此作為計算機專業人工智慧的學習者,學習和研究深度學習是一項必修課。   神經網路作為作為深度學

最新深度神經網路演算法機器學習深度學系列

深度神經網路演算法機器學習深度學系列視訊教程 (基礎1)Python程式入門視訊 課程Python介紹_壓縮 環境配置 配置Python環境 以及資料型別 字串String和變數 資料型別2整型_字串 資料結構列表 列表List元組tuple對比 元組 詞典 函式 函式 控制流 控制流 控制流 控制

如何利用Keras中的權重約束減少深度神經網路中的過擬合

                                          &nb