本文作者原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。
今天我們來講解一下為什么要正則化輸入(也叫標(biāo)準(zhǔn)化輸入)呢?
正則化輸入其實(shí)就是論文中說的局部相應(yīng)歸一化,它最早由Krizhevsky和Hinton在關(guān)于ImageNet的論文里面使用的一種數(shù)據(jù)標(biāo)準(zhǔn)化方法。
在實(shí)際應(yīng)用中,我們可能會(huì)遇到各維度數(shù)據(jù)或者各特征在空間中的分布差別很大。就如同下圖
這給訓(xùn)練增加了難度,我們可以看一下如果是這樣的數(shù)據(jù)我們會(huì)得到一個(gè)什么樣的梯度下降圖。
很明顯,這是一個(gè)狹長(zhǎng)的立體圖形,在進(jìn)行反向傳播的過程中,如果在兩端開始梯度下降的話,整個(gè)過程就變得很漫長(zhǎng)。所以為了解決這種情況,我們使用了正則化輸入去解決。下面就是正則化輸入的計(jì)算公式:
按照這個(gè)公式來計(jì)算的話,我們的梯度下降就變成這樣了。
這樣的話我們無論是從哪一個(gè)點(diǎn)開始梯度下降,得到的效果是一樣的。
那我們?cè)賮砜匆幌略?a href="http://www.wenjunhu.com/tags/tensorflow/" target="_blank">Tensorflow中是怎么實(shí)現(xiàn)的。Tensorflow中的API是tf.nn.lrn,別名也叫tf.nn.local_response_normalization,這兩個(gè)是一個(gè)東西。再來看一下函數(shù)是怎么定義的:
local_response_normalization( input, depth_radius=5, bias=1, alpha=1, beta=0.5, name=None)
里面那么多參數(shù),那分別又是代表什么呢?首先,input是我們要輸入的張量,depth_radius就是上面公式中的n/2,其實(shí)這個(gè)變量名為什么叫depth_radius呢?radius不是半徑嗎?與半徑又有什么關(guān)系呢,我等下再來講解為什么。接著,bias是偏移量,alpha就是公式中的α,beat就是公式中的β。
其實(shí)啊,LRN也可以看作是“每個(gè)像素”在零值化后除以“半徑以內(nèi)的其他對(duì)應(yīng)像素的平方和”,這個(gè)半徑就是給定的變量depth_radius的值。
那我們用代碼來看一下效果怎么樣:
import numpy as npimport tensorflow as tfa = 2 * np.ones([2, 2, 2, 3])print(a)b = tf.nn.local_response_normalization(a, 1, 0, 1, 1)with tf.Session() as sess: print(sess.run(b))
輸出的結(jié)果a是:
輸出的結(jié)果b是:
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5510瀏覽量
121349 -
正則化輸入
+關(guān)注
關(guān)注
0文章
1瀏覽量
856
原文標(biāo)題:技術(shù)詳解 | 為什么要正則化輸入?
文章出處:【微信號(hào):gh_a204797f977b,微信公眾號(hào):深度學(xué)習(xí)實(shí)戰(zhàn)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論