日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】Task5:神经网络基础

發(fā)布時(shí)間:2025/3/19 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】Task5:神经网络基础 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、前饋神經(jīng)網(wǎng)絡(luò)
  • 二、簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)(tensorflow)
  • 三、激活函數(shù)
    • 1、概述
    • 2、sigmoid 激活函數(shù)
      • (1)定義
      • (2)特點(diǎn)
      • (3)缺點(diǎn)
    • 3、tanh函數(shù)
    • 4、ReLU函數(shù)
    • 5、Leaky ReLU
    • 6、Maxout
    • 7、ELU
    • 8、激活函數(shù)的選擇
  • 四、正則化
    • 1、參數(shù)范數(shù)懲罰
      • (1)相關(guān)定義
      • (2)L0正則化
      • (3)L1正則化
      • (4)L2正則化
    • 2、數(shù)據(jù)擴(kuò)增(data agumentation)
    • 3、噪聲添加
    • 4、Dropout
    • 5、早期停止(early stopping)
  • 五、深度模型中的優(yōu)化(待完善)
    • 1、參數(shù)初始化策略
      • (1)全零初始化??
      • (2)隨機(jī)初始化 (Random Initialization)
      • (3)Xavier
      • (4)MSRA
      • (5)bias初始化
      • (6)小結(jié)
    • 2、自適應(yīng)學(xué)習(xí)率算法
    • 3、batch norm層
    • 4、layer norm層

  • 前饋神經(jīng)網(wǎng)絡(luò)、網(wǎng)絡(luò)層數(shù)、輸入層、隱藏層、輸出層、隱藏單元、激活函數(shù)的概念。
  • 感知機(jī)相關(guān);利用tensorflow等工具定義簡(jiǎn)單的幾層網(wǎng)絡(luò)(激活函數(shù)sigmoid),遞歸使用鏈?zhǔn)椒▌t來(lái)實(shí)現(xiàn)反向傳播。
  • 激活函數(shù)的種類以及各自的提出背景、優(yōu)缺點(diǎn)。(和線性模型對(duì)比,線性模型的局限性,去線性化)
  • 深度學(xué)習(xí)中的正則化(參數(shù)范數(shù)懲罰:L1正則化、L2正則化;數(shù)據(jù)集增強(qiáng);噪聲添加;early stop;Dropout層)、正則化的介紹。
  • 深度模型中的優(yōu)化:參數(shù)初始化策略;自適應(yīng)學(xué)習(xí)率算法(梯度下降、AdaGrad、RMSProp、Adam;優(yōu)化算法的選擇);batch norm層(提出背景、解決什么問(wèn)題、層在訓(xùn)練和測(cè)試階段的計(jì)算公式);layer norm層。
  • 一、前饋神經(jīng)網(wǎng)絡(luò)

    概念:前饋神經(jīng)網(wǎng)絡(luò)、網(wǎng)絡(luò)層數(shù)、輸入層、隱藏層、輸出層、隱藏單元、激活函數(shù)

    前饋神經(jīng)網(wǎng)絡(luò):前饋神經(jīng)網(wǎng)絡(luò)是一種最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),各神經(jīng)元分層排列。每個(gè)神經(jīng)元只與前一層的神經(jīng)元相連。接收前一層的輸出,并輸出給下一層.各層間沒有反饋。

    網(wǎng)絡(luò)層數(shù):一般是指設(shè)置或者搭建的模型有多少層。以上圖為例,網(wǎng)絡(luò)層為3。注:一般不包括輸入層。

    輸入層:一般指數(shù)據(jù)輸入模型的一層,如圖中 Layer L1L_1L1? 層。

    輸出層:一般指模型的最后一層,即Layer L4L_4L4? 層;

    隱藏層:指除開輸入層和輸出層之外的中間層,如圖Layer L2L_2L2? 層和 L3L_3L? 層;

    隱藏單元:一般指隱藏層中的單元結(jié)構(gòu)。

    激活函數(shù):一般指加權(quán)之后的值到輸出之間函數(shù),通過(guò)激活函數(shù)將上一層的輸出作為下一層輸入之前進(jìn)行非線性變化,使模型不再是單一的線性變換。

    二、簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)(tensorflow)

    前期準(zhǔn)備
    首先給網(wǎng)絡(luò)提供 MMM 個(gè)訓(xùn)練對(duì) (X,Y)(X,Y)(XY)XXX 為輸入,YYY 為期望的輸出。輸入通過(guò)激活函數(shù) g(h)g(h)g(h) 和隱藏層傳播到輸出層。輸出 Y^\hat{Y}Y^ 是網(wǎng)絡(luò)的輸出,得到 error=Y?Y^error=Y-\hat{Y}error=Y?Y^。其損失函數(shù) J(W)J(W)J(W) 如下:
    J(W)=12M∑i=1N(Yi?Y^i)2J(W)=\frac{1}{2M}\sum_{i=1}^{N}(Y_i-\hat{Y}_i)^2J(W)=2M1?i=1N?(Yi??Y^i?)2
    其中,iii 取遍所有輸出層的神經(jīng)元(1 到 N)。然后可以使用 J(W)J(W)J(W) 的梯度并使用鏈?zhǔn)椒▌t求導(dǎo),來(lái)計(jì)算連接第 iii 個(gè)輸出層神經(jīng)元到第 jjj 個(gè)隱藏層神經(jīng)元的權(quán)重 WijW_{ij}Wij? 的變化:
    ΔWij=?η?J?Wij=η1M?(Yi?Y^i)2?Y^?Y^?hi?hi?Wij=η1M(Yi?Y^i)g′(hi)Oj\Delta W_{ij}=-\eta\frac{\partial{J}}{\partial W_{ij}}=\eta\frac{1}{M}\frac{\partial{(Y_i-\hat{Y}_i)^2}}{\partial{\hat{Y}}} \frac{\partial{\hat{Y}}}{\partial{h_i}} \frac{\partial{h_i}}{\partial{W_{ij}}}=\eta\frac{1}{M}(Y_i-\hat{Y}_i)g'(h_i)O_j ΔWij?=?η?Wij??J?=ηM1??Y^?(Yi??Y^i?)2??hi??Y^??Wij??hi??=ηM1?(Yi??Y^i?)g(hi?)Oj?
    這里,OjO_jOj? 是隱藏層神經(jīng)元的輸出,hih_ihi? 表示輸出層的輸入值。這很容易理解,但現(xiàn)在怎么更新連接第 nnn 個(gè)隱藏層的神經(jīng)元 kkk 到第 n+1n+1n+1 個(gè)隱藏層的神經(jīng)元 jjj 的權(quán)值 WjkW_{jk}Wjk??過(guò)程是相同的:將使用損失函數(shù)的梯度和鏈?zhǔn)椒▌t求導(dǎo),但這次計(jì)算 WjkW_{jk}Wjk?

    通過(guò)二層的全連接網(wǎng)絡(luò),實(shí)現(xiàn) mnist 數(shù)據(jù)集分類任務(wù)。

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_datamnist_path = '/home/jie/Jie/codes/tf/datasets/MNIST_data/' mnist = input_data.read_data_sets(mnist_path, one_hot=True)# 定義超參數(shù)和其他常量 n_input = 784 # 28 * 28 n_classes = 10max_epochs = 10000 learning_rate = 0.5 batch_size = 10 seed = 0 n_hidden = 30 ## Sigmoid 函數(shù)的導(dǎo)數(shù) def sigmaprime(x):return tf.multiply(tf.sigmoid(x), tf.subtract(tf.constant(1.0), tf.sigmoid(x)))# 為訓(xùn)練數(shù)據(jù)創(chuàng)建占位符 x_in = tf.placeholder(tf.float32, [None, n_input], name='x_in') y = tf.placeholder(tf.float32, [None, n_classes], name='y')# 創(chuàng)建模型 def multilayer_perceptron(x, weight, biases):h_layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['h1'])out_layer_1 = tf.sigmoid(h_layer_1)h_out = tf.add(tf.matmul(out_layer_1, weights['h2']), biases['h2'])return tf.sigmoid(h_out), h_out, out_layer_1, h_layer_1# 權(quán)重 weights = {'h1':tf.Variable(tf.random_normal([n_input, n_hidden], seed=seed)),'h2':tf.Variable(tf.random_normal([n_hidden, n_classes], seed=seed))} # 偏置 biases = {'h1':tf.Variable(tf.random_normal([1, n_hidden], seed=seed)),'h2':tf.Variable(tf.random_normal([1, n_classes], seed=seed))}# 正向傳播 y_hat, h_2, o_1, h_1 = multilayer_perceptron(x_in, weights, biases)# loss function err = y - y_hat loss = tf.reduce_mean(tf.square(err, name='loss'))# 反向傳播 delta_2 = tf.multiply(err, sigmaprime(h_2)) delta_w_2 = tf.matmul(tf.transpose(o_1), delta_2)wtd_error = tf.matmul(delta_2, tf.transpose(weights['h2'])) delta_1 = tf.multiply(wtd_error, sigmaprime(h_1)) delta_w_1 = tf.matmul(tf.transpose(x_in), delta_1)eta = tf.constant(learning_rate)# 更新權(quán)重 train = [tf.assign(weights['h1'], tf.add(weights['h1'], tf.multiply(eta, delta_w_1))),tf.assign(biases['h1'], tf.add(biases['h1'], tf.multiply(eta, tf.reduce_mean(delta_1, axis=[0])))),tf.assign(weights['h2'], tf.add(weights['h2'], tf.multiply(eta, delta_w_2))),tf.assign(biases['h2'], tf.add(biases['h2'], tf.multiply(eta, tf.reduce_mean(delta_2, axis=[0])))) ]# 定義精度 acc_mat = tf.equal(tf.argmax(y_hat, 1), tf.argmax(y, 1)) accuracy = tf.reduce_sum(tf.cast(acc_mat, tf.float32))# train init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)for epoch in range(max_epochs):batch_xs, batch_ys = mnist.train.next_batch(batch_size)_, loss1 = sess.run([train, loss], feed_dict={x_in: batch_xs, y: batch_ys})if epoch % 1000 == 0:print('Epoch: {0} loss: {1}'.format(epoch, loss1))acc_test = sess.run(accuracy, feed_dict={x_in: mnist.test.images, y:mnist.test.labels})acc_train = sess.run(accuracy, feed_dict={x_in: mnist.train.images, y:mnist.train.labels})# 評(píng)估print('Accuracy Train%: {1} Accuracy Test%: {2}'.format(epoch, acc_train / 600, (acc_test / 100)))

    輸出結(jié)果

    Epoch: 0 loss: 0.3155866861343384 Epoch: 1000 loss: 0.023114416748285294 Epoch: 2000 loss: 0.017101742327213287 Epoch: 3000 loss: 0.01927866041660309 Epoch: 4000 loss: 0.019498592242598534 Epoch: 5000 loss: 0.017000144347548485 Epoch: 6000 loss: 0.006083908025175333 Epoch: 7000 loss: 0.018798980861902237 Epoch: 8000 loss: 0.04835653677582741 Epoch: 9000 loss: 0.0037784664891660213 Accuracy Train%: 84.58166666666666 Accuracy Test%: 92.65

    三、激活函數(shù)

    1、概述

    主要作用:提供網(wǎng)絡(luò)的非線性建模能力。
    假設(shè)一個(gè)神經(jīng)網(wǎng)絡(luò)中僅包含線性卷積和全連接運(yùn)算,那么該網(wǎng)絡(luò)僅能夠表達(dá)線性映射,即無(wú)論神經(jīng)網(wǎng)絡(luò)有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當(dāng)。加入(非線性)激活函數(shù)之后,深度神經(jīng)網(wǎng)絡(luò)才具備了分層的非線性映射學(xué)習(xí)能力,幾乎可以逼近任意函數(shù)。

    激活函數(shù)的性質(zhì):

    • 可微性: 當(dāng)優(yōu)化方法是基于梯度的時(shí)候,這個(gè)性質(zhì)是必須的。
    • 單調(diào)性: 當(dāng)激活函數(shù)是單調(diào)的時(shí)候,單層網(wǎng)絡(luò)能夠保證是凸函數(shù)。
    • 輸出值的范圍: 當(dāng)激活函數(shù)輸出值是 有限 的時(shí)候,基于梯度的優(yōu)化方法會(huì)更加 穩(wěn)定,因?yàn)樘卣鞯谋硎臼苡邢迿?quán)值的影響更顯著;當(dāng)激活函數(shù)的輸出是 無(wú)限 的時(shí)候,模型的訓(xùn)練會(huì)更加高效,不過(guò)在這種情況小,一般需要更小的learning rate

    常用的激活函數(shù):

    • sigmoid
    • tanh
    • ReLU
    • Leaky ReLU
    • Maxout
    • ELU

    2、sigmoid 激活函數(shù)

    (1)定義

    sigmoidsigmoidsigmoid 函數(shù),即著名的 LogisticLogisticLogistic 函數(shù),是常用的非線性激活函數(shù),可將變量映射到 (0,1)(0,1)(0,1) 之間,公式如下:
    f(x)=11+e?xf(x)=\frac{1}{1+e^{-x}}f(x)=1+e?x1?
    幾何圖像如下:

    (2)特點(diǎn)

    能將輸入的連續(xù)實(shí)值映射到 (0,1)(0,1)(0,1) 之間。特別的,若非常小的負(fù)值,輸出為 0;非常大的正值,輸出為1。

    (3)缺點(diǎn)

    缺點(diǎn)1:梯度爆炸和梯度消失
    在深度神經(jīng)網(wǎng)絡(luò)中梯度反向傳播時(shí)可能會(huì)導(dǎo)致梯度爆炸和梯度消失,其中梯度爆炸發(fā)生的概率非常小,而梯度消失發(fā)生的概率比較大。
    sigmoidsigmoidsigmoid 函數(shù)的導(dǎo)數(shù)為:
    f′(x)=e?x(1+e?x)2=f(x)(1?f(x))f'(x)=\frac{e^{-x}}{(1+e^{-x})^2}=f(x)(1-f(x))f(x)=(1+e?x)2e?x?=f(x)(1?f(x))

    當(dāng)網(wǎng)絡(luò)權(quán)值初始化為 (1,+∞)(1,+∞)(1,+)區(qū)間內(nèi)的值,則會(huì)出現(xiàn)梯度爆炸情況。

    sigmoid 的軟飽和性。從上圖可以看到,其兩側(cè)導(dǎo)數(shù)逐漸趨近于0,具有這種性質(zhì)的稱為軟飽和激活函數(shù)。具體的,飽和又可分為左飽和與右飽和。
    lim?n→∞f′(x)=0\lim_{n \to \infty} f'(x)=0 \quadnlim?f(x)=0

    與軟飽和對(duì)應(yīng)的是硬飽和,即
    f′(x)=0,當(dāng)∣x∣>c,其中c為常數(shù)。f'(x)=0,當(dāng)|x|>c,其中 c 為常數(shù)。f(x)=0當(dāng)x>cc數(shù)

    sigmoidsigmoidsigmoid 的軟飽和性,使得深度神經(jīng)網(wǎng)絡(luò)在二三十年里一直難以有效的訓(xùn)練,是阻礙神經(jīng)網(wǎng)絡(luò)發(fā)展的重要原因。具體來(lái)說(shuō),由于在后向傳遞過(guò)程中,sigmoidsigmoidsigmoid 向下傳導(dǎo)的梯度包含了一個(gè) f′(x)f'(x)f(x) 因子(sigmoidsigmoidsigmoid 關(guān)于輸入的導(dǎo)數(shù)),因此一旦輸入落入飽和區(qū), f′(x)f'(x)f(x) 就會(huì)變得接近于 000,導(dǎo)致了向底層傳遞的梯度也變得非常小。此時(shí),網(wǎng)絡(luò)參數(shù)很難得到有效訓(xùn)練。這種現(xiàn)象被稱為梯度消失。一般來(lái)說(shuō),sigmoidsigmoidsigmoid 網(wǎng)絡(luò)在 5 層之內(nèi)就會(huì)產(chǎn)生梯度消失現(xiàn)象

    缺點(diǎn)2:Sigmoid 的 output 不是0均值(即zero-centered)
    其值域在[0,1]之間,函數(shù)輸出不是0均值的,權(quán)重更新效率降低,因?yàn)檫@會(huì)導(dǎo)致后層的神經(jīng)元的輸入是非0均值的信號(hào),這會(huì)對(duì)梯度產(chǎn)生影響:假設(shè)后層神經(jīng)元的輸入都為正(e.g. x>0x>0x>0 elementwise in ),那么對(duì)w求局部梯度則都為正,這樣在反向傳播的過(guò)程中w要么都往正方向更新,要么都往負(fù)方向更新,導(dǎo)致有一種捆綁的效果,使得收斂緩慢。 當(dāng)然了,若按batch去訓(xùn)練,那么每個(gè)batch可能得到不同的符號(hào)(正或負(fù)),那么相加一下這個(gè)問(wèn)題還是可以緩解。因此,非0均值這個(gè)問(wèn)題雖然會(huì)產(chǎn)生一些不好的影響,不過(guò)跟上面提到的梯度消失問(wèn)題相比還是要好很多的。

    缺點(diǎn)3:耗時(shí)
    其解析式中含有冪運(yùn)算,計(jì)算機(jī)求解時(shí)相對(duì)來(lái)講比較耗時(shí)。對(duì)于規(guī)模比較大的深度網(wǎng)絡(luò),這會(huì)較大地增加訓(xùn)練時(shí)間。

    缺點(diǎn)4:梯度彌散(死區(qū))
    受現(xiàn)有的梯度下降算法所限(嚴(yán)重依賴逐層的梯度計(jì)算值),Sigmoid函數(shù)對(duì)落入 (?∞,?5)∪(5,+∞)(-∞,-5) ∪ (5,+∞)(?,?5)(5,+)的輸入值,梯度計(jì)算為 000,發(fā)生 梯度彌散。因此該函數(shù)存在一正一負(fù) 兩塊“死區(qū)”[藍(lán)框區(qū)域]

    3、tanh函數(shù)

    tanh是雙曲函數(shù)中的一種,又名 雙曲正切:
    tanh(x)=ex?e?xex+e?x=2sigmoid(2x)?1tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}=2sigmoid(2x)-1tanh(x)=ex+e?xex?e?x?=2sigmoid(2x)?1
    導(dǎo)數(shù)為:
    tanh′(x)=4e?2x(e?2x+1)2=2tanh(x)(1?tanh(x))tanh'(x)=\frac{4 e^{-2x}}{(e^{-2x}+1)^2}=2tanh(x)(1-tanh(x))tanh(x)=(e?2x+1)24e?2x?=2tanh(x)(1?tanh(x))

    優(yōu)點(diǎn)

    • tanh解決了sigmoid的輸出非“零為中心”的問(wèn)題。

    缺點(diǎn)

    • 依然有sigmoid函數(shù)梯度消失的問(wèn)題。
    • 依然指數(shù)運(yùn)算。

    4、ReLU函數(shù)

    ReLU(Rectified Linear Unit,修正線性單元),是一種線性且不飽和的激活函數(shù)。公式如下:
    f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x)
    導(dǎo)數(shù)如下:
    f′(x)={1,if?x>00,if?x≤0f'(x)=\begin{cases} 1, & \text{if $x>0$} \\ 0 , & \text{if $x\leq0$ } \end{cases}f(x)={1,0,?if?x>0if?x0??


    優(yōu)點(diǎn)

    • ReLU解決了梯度消失的問(wèn)題,至少 xxx 在正區(qū)間內(nèi),神經(jīng)元不會(huì)飽和。
    • 由于ReLU線性、非飽和的形式,在SGD中能夠快速收斂。
    • 計(jì)算速度要快很多。線性計(jì)算

    缺點(diǎn)

    • ReLU的輸出不是“零為中心”(Notzero-centered output)。
    • 隨著訓(xùn)練的進(jìn)行,可能會(huì)出現(xiàn)神經(jīng)元死亡,權(quán)重?zé)o法更新的情況。(不可逆轉(zhuǎn)的死亡)
      • 解釋:訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時(shí)候,一旦學(xué)習(xí)率沒有設(shè)置好,第一次更新權(quán)重的時(shí)候,輸入是負(fù)值,那么這個(gè)含有ReLU的神經(jīng)節(jié)點(diǎn)就會(huì)死亡,再也不會(huì)被激活。
      • 因?yàn)?#xff1a;ReLU的導(dǎo)數(shù)在x>0的時(shí)候是1,在x<=0的時(shí)候是0。如果x<=0,那么ReLU的輸出是0,那么反向傳播中梯度也是0,權(quán)重就不會(huì)被更新,導(dǎo)致神經(jīng)元不再學(xué)習(xí)。 也就是說(shuō),這個(gè)ReLU激活函數(shù)在訓(xùn)練中將不可逆轉(zhuǎn)的死亡,導(dǎo)致了訓(xùn)練數(shù)據(jù)多樣化的丟失。
      • 在實(shí)際訓(xùn)練中,如果學(xué)習(xí)率設(shè)置的太高,可能會(huì)發(fā)現(xiàn)網(wǎng)絡(luò)中40%的神經(jīng)元都會(huì)死掉,且在整個(gè)訓(xùn)練集中這些神經(jīng)元都不會(huì)被激活。所以,設(shè)置一個(gè)合適的較小的學(xué)習(xí)率,會(huì)降低這種情況的發(fā)生。為了解決神經(jīng)元節(jié)點(diǎn)死亡的情況,有人提出了Leaky ReLU、P-ReLU、R-ReLU、ELU等激活函數(shù)。

    5、Leaky ReLU

    Leaky ReLU 是 ReLU 激活函數(shù)的改進(jìn)版本,公式如下:
    f(x)={x,if?x&gt;0ax,if?x≤0f(x)=\begin{cases} x, &amp; \text{if $x&gt;0$} \\ ax , &amp; \text{if $x\leq0$ } \end{cases}f(x)={x,ax,?if?x>0if?x0??
    導(dǎo)數(shù)如下:
    f(x)={1,if?x&gt;0a,if?x≤0f(x)=\begin{cases} 1, &amp; \text{if $x&gt;0$} \\ a , &amp; \text{if $x\leq0$ } \end{cases}f(x)={1,a,?if?x>0if?x0??


    優(yōu)點(diǎn)

    • 神經(jīng)元不會(huì)出現(xiàn)死亡的情況。
    • 對(duì)于所有的輸入,不管是大于等于0還是小于0,神經(jīng)元不會(huì)飽和。
    • 由于Leaky ReLU線性、非飽和的形式,在SGD中能夠快速收斂。
    • 計(jì)算速度要快很多。只有線性關(guān)系。

    缺點(diǎn)

    • Leaky ReLU函數(shù)中的 ααα,需要通過(guò)先驗(yàn)知識(shí)人工賦值,通常 α=0.01\alpha=0.01α=0.01。

    6、Maxout

    Maxout 是 ReLU 的推廣,定義如下:
    f(x)=max(w1Tx+b1,w2Tx+b2,?,wnTx+bn)f(x)=max(w^T_1x+b_1,w^T_2x+b_2,?,w^T_nx+b_n)f(x)=max(w1T?x+b1?,w2T?x+b2?,?,wnT?x+bn?)

    Maxout 網(wǎng)絡(luò)能夠近似任意連續(xù)函數(shù),且當(dāng)w2,b2,…,wn,bnw_2,b_2,…,w_n,b_nw2?,b2?,,wn?,bn?為0時(shí),退化為ReLU。

    優(yōu)點(diǎn)

    • Maxout能夠緩解梯度消失
    • 規(guī)避了ReLU神經(jīng)元死亡的缺點(diǎn)

    缺點(diǎn)

    • 增加了參數(shù)和計(jì)算量。

    7、ELU

    ELU(Exponential Linear Units,指數(shù)線性單元)。它試圖將激活函數(shù)的輸出平均值接近零,從而加快學(xué)習(xí)速度。同時(shí),它還能通過(guò)正值的標(biāo)識(shí)來(lái)避免梯度消失的問(wèn)題。
    公式如下:
    ?f(x)={x,if?x&gt;0a(ex?1),otherwise?f(x)=\begin{cases} x, &amp; \text{if $x&gt;0$} \\ a(e^x-1) , &amp; \text{otherwise } \end{cases}f(x)={x,a(ex?1),?if?x>0otherwise??
    其中,超參數(shù) α\alphaα 常被設(shè)定為 1
    導(dǎo)數(shù)如下:
    ?f′(x)={1,if?x&gt;0aex,otherwise?f&#x27;(x)=\begin{cases} 1, &amp; \text{if $x&gt;0$} \\ ae^x , &amp; \text{otherwise } \end{cases}f(x)={1,aex,?if?x>0otherwise??

    優(yōu)點(diǎn)

    • 完美解決了死區(qū)問(wèn)題。
    • ELU激活函數(shù)的輸出均值是接近于零的

    缺點(diǎn)

    • 計(jì)算較復(fù)雜。

    8、激活函數(shù)的選擇

    (1)深度學(xué)習(xí)需要大量時(shí)間處理大量數(shù)據(jù),模型的收斂速度尤為重要。所以,總體來(lái)講,訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)盡量使用 zero-centered 數(shù)據(jù)(預(yù)處理實(shí)現(xiàn)) 和 zero-centered 輸出。
    ==》盡量選擇輸出具有 zero-centered 特點(diǎn)的激活函數(shù)來(lái)加速模型的收斂速度。
    (2)在使用 ReLU 時(shí),小心設(shè)置 learning_rate,而且注意不要出現(xiàn)很多神經(jīng)元死亡。若不好解決,可嘗試 Leaky ReLU、Maxout 等。
    (3)最好不使用 sigmoid、tanh
    (4)conv -> bn -> relu 標(biāo)配的 module。

    四、正則化

    正則化是選擇模型的一種方法,具體來(lái)說(shuō),選擇經(jīng)驗(yàn)風(fēng)險(xiǎn)與模型復(fù)雜度同時(shí)較小的模型(防止過(guò)擬合),這樣可以較少泛化誤差而不是訓(xùn)練誤差。

    常用正則化方法

    • 參數(shù)范數(shù)懲罰:L1正則化、L2正則化;
    • 數(shù)據(jù)集增強(qiáng);
    • 噪聲添加;
    • early stop;
    • Dropout層

    1、參數(shù)范數(shù)懲罰

    參數(shù)范數(shù)懲罰通過(guò)對(duì)目標(biāo)函數(shù) JJJ 添加一個(gè)參數(shù)范數(shù)懲罰 Ω(θ)Ω(θ)Ω(θ),限制模型的學(xué)習(xí)能力。

    將正則化歐的目標(biāo)函數(shù)記為 J~\tilde{J}J~
    J~(θ;X,y)=J(θ;X,y)+αΩ(θ)\tilde{J}(\theta;X,y)=J(\theta;X,y)+\alphaΩ(θ)J~(θ;X,y)=J(θ;X,y)+αΩ(θ)
    其中 α≥0\alpha\geq0α0 是權(quán)衡范數(shù)懲罰項(xiàng) ΩΩΩ 和標(biāo)準(zhǔn)目標(biāo)函數(shù) J(X;θ)J(X;θ)J(X;θ) 相對(duì)貢獻(xiàn)的超參數(shù),通過(guò)調(diào)整 α\alphaα 的大小,可以獲得不同的參數(shù)選擇偏好。

    注意:參數(shù)包括模型中每一層仿射變換的權(quán)重和偏置,我們通常只對(duì)權(quán)重做懲罰,而不對(duì)偏置做正則懲罰。因?yàn)榫_擬合偏置所需的數(shù)據(jù)通常比權(quán)重少的多,正則化偏置參數(shù)可能會(huì)導(dǎo)致明顯的欠擬合。

    (1)相關(guān)定義

    L0范數(shù):權(quán)重向量 WWW 中非0的元素的個(gè)數(shù),通常表示為 ∣∣W∣∣0||W||_0W0?。
    L1范數(shù):權(quán)值向量 WWW 中各個(gè)元素的絕對(duì)值之和,通常表示為 ∣∣W∣∣1||W||_1W1?。
    L2范數(shù):權(quán)值向量 WWW 中各個(gè)元素的平方的和的開方值,通常表示為 ∣∣W∣∣2||W||_2W2?

    任何的規(guī)則化算子,如果它在 Wi=0W_i=0Wi?=0 處不可微,并且可以分解為一個(gè)“求和”的形式,則該規(guī)則化算子就可以實(shí)現(xiàn)稀疏。

    稀疏的好處

    • 特征選擇(Feature Selection):能實(shí)現(xiàn)特征的自動(dòng)選擇
      稀疏規(guī)則化算子會(huì)學(xué)習(xí)地去掉這些對(duì)最終輸出結(jié)果沒有關(guān)系或者不提供任何信息的特征,也就是把這些特征對(duì)應(yīng)的權(quán)重置為0。

    • 可解釋性(Interpretability)
      非零權(quán)重的特征為輸出結(jié)果提供的信息是巨大的、決策性的。

    (2)L0正則化

    從直觀上看,利用非零參數(shù)的個(gè)數(shù),可以很好的來(lái)選擇特征,實(shí)現(xiàn)特征稀疏的效果,具體操作時(shí)選擇參數(shù)非零的特征即可。

    但因?yàn)長(zhǎng)0正則化很難求解,是個(gè)NP難問(wèn)題,因此一般采用L1正則化。L1正則化是L0正則化的最優(yōu)凸近似,比L0容易求解,并且也可以實(shí)現(xiàn)稀疏的效果。

    (3)L1正則化

    L1范數(shù)也稱叫“稀疏規(guī)則算子”(Lasso regularization),L1范數(shù)和 L0范數(shù) 可以實(shí)現(xiàn)稀疏,L1因具有比L0更好的優(yōu)化求解特性而被廣泛應(yīng)用。

    (4)L2正則化

    L2范數(shù),在回歸中稱為:“嶺回歸” (Ridge Regression) 或 “權(quán)值衰減weight decay”。

    讓L2范數(shù)的規(guī)則項(xiàng) ∣∣W∣∣2||W||_2W2? 最小,可以使得 WWW 的每個(gè)元素都很小,都接近于0(不會(huì)讓它等于0)。而越小的參數(shù)說(shuō)明模型越簡(jiǎn)單,越簡(jiǎn)單的模型則越不容易產(chǎn)生過(guò)擬合現(xiàn)象。

    2、數(shù)據(jù)擴(kuò)增(data agumentation)

    較少過(guò)擬合的最簡(jiǎn)單方法:增加訓(xùn)練集樣本,也稱數(shù)據(jù)擴(kuò)增(data agumentation)。但是由于標(biāo)注數(shù)據(jù)昂貴,需要通過(guò)其他方式增加樣本。

    • 圖像處理:旋轉(zhuǎn)、翻轉(zhuǎn)、放縮、平移等等。
    • GAN(對(duì)抗式生成網(wǎng)絡(luò))

    3、噪聲添加

    噪聲添加:將其直接添加到學(xué)習(xí)到的權(quán)重上。這項(xiàng)技術(shù)主要被用于循環(huán)神經(jīng)網(wǎng)絡(luò)的情況下。
    在某些假設(shè)下,施加于權(quán)重的噪聲可以被解釋為與更傳統(tǒng)的正則化形式等同,鼓勵(lì)要學(xué)習(xí)的函數(shù)保持穩(wěn)定。

    4、Dropout

    Dropout:在用前向傳播算法和反向傳播算法訓(xùn)練模型時(shí),隨機(jī)的從全連接DNN網(wǎng)絡(luò)中去掉一部分隱含層的神經(jīng)元。

    兩種理解:

    • 減少神經(jīng)元之間復(fù)雜的共適應(yīng)關(guān)系:在每次訓(xùn)練的時(shí)候使用dropout,每個(gè)神經(jīng)元有一定的概率被移除,這樣可以使得一個(gè)神經(jīng)元的訓(xùn)練不依賴于另外一個(gè)神經(jīng)元,同樣也就使得特征之間的協(xié)同作用被減弱。 Hinton認(rèn)為,過(guò)擬合可以通過(guò)阻止某些特征的協(xié)同作用來(lái)緩解。
    • 多模型效果平均的方式。對(duì)于減少測(cè)試集中的錯(cuò)誤,我們可以將多個(gè)不同神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)結(jié)果取平均,而因?yàn)閐ropout的隨機(jī)性,在每次dropout后,網(wǎng)絡(luò)模型可看成不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),而要訓(xùn)練的參數(shù)數(shù)目卻是不變的,這就解脫了訓(xùn)練多個(gè)獨(dú)立的不同神經(jīng)網(wǎng)絡(luò)的時(shí)耗問(wèn)題。在測(cè)試輸出的時(shí)候,將輸出權(quán)重乘以保留概率1-p%,從而達(dá)到類似平均的效果。

    左邊的圖為一個(gè)完全的全連接層,右邊為應(yīng)用dropout后的全連接層。

    做法

    • 訓(xùn)練階段:每次更新參數(shù)之前,每個(gè)神經(jīng)元有一定的概率被丟棄,假設(shè)為p%,p可以設(shè)為50或者根據(jù)驗(yàn)證集的表現(xiàn)來(lái)選取,輸入層的p比較小,保留概率接近于1
    • 測(cè)試階段不dropout,保留所有單元的權(quán)重,而且要乘以保留概率1-p%,為了保證輸出期望一致。

    dropout不只用于前饋神經(jīng)網(wǎng)絡(luò),還可以用于圖模型,比如玻爾茲曼機(jī)。

    5、早期停止(early stopping)

    早期停止是一種交叉驗(yàn)證策略,將一部分?jǐn)?shù)據(jù)集作為驗(yàn)證集(validation set)。

    當(dāng)我們看到驗(yàn)證集上的性能越來(lái)越差時(shí),就停止對(duì)模型的訓(xùn)練。

    五、深度模型中的優(yōu)化(待完善)

    1、參數(shù)初始化策略

    目的:在訓(xùn)練中學(xué)到有用的信息,需要參數(shù)更新時(shí)的梯度不為0。而一般來(lái)講,參數(shù)更新的梯度和反向傳播得到的狀態(tài)梯度以及輸入激活值有關(guān)。
    ==》初始化條件:

    • 各層激活值不會(huì)出現(xiàn)飽和現(xiàn)象(eg: sigmoid、tanh)
    • 各層激活值不為0。

    (1)全零初始化??

    全零初始化:模型無(wú)法更新,而且模型權(quán)重的相同,導(dǎo)致模型的高度對(duì)稱性。
    ==》需要破壞對(duì)稱性

    (2)隨機(jī)初始化 (Random Initialization)

    將參數(shù)值(通過(guò)高斯分布或均勻分布)隨機(jī)初始化為 接近0的 一個(gè)很小的隨機(jī)數(shù)(有正有負(fù)),從而使對(duì)稱失效。

    (3)Xavier

    基本思想:保持輸入和輸出的方差一致,這樣就避免了所有輸出值都趨向于0。

    (4)MSRA

    (5)bias初始化

    通常初始化為0(若初始化為0.01等值,可能并不能得到好的提升,反而可能下降)

    (6)小結(jié)

    • Gaussian
      滿足mean=0mean=0mean=0std=1std=1std=1的高斯分布x~N(mean,std)x~N(mean,std)xN(mean,std)

    • Xavier
      定義參數(shù)所在層的輸入維度為n,輸出維度為m,那么參數(shù)將以均勻分布的方式在[?6m+n,6m+n][-\sqrt{\frac{6}{m+n}},\sqrt{\frac{6}{m+n}}][?m+n6??,m+n6??]的范圍內(nèi)進(jìn)行初始化。

    • MSRA
      滿足x~N(0,σ2)x~N(0,σ2)xN(0,σ2) 的高斯分布,其中σ=sqrt(2/n)σ = sqrt(2/n)σ=sqrt(2/n)

    • Uniform
      滿足min=0,max=1的均勻分布。x~U(min,max)x~U(min,max)xU(min,max)

    2、自適應(yīng)學(xué)習(xí)率算法

    梯度下降、AdaGrad、RMSProp、Adam;優(yōu)化算法的選擇

    3、batch norm層

    提出背景、解決什么問(wèn)題、層在訓(xùn)練和測(cè)試階段的計(jì)算公式

    4、layer norm層

    參考鏈接:

    • TensorFlow實(shí)現(xiàn)反向傳播算法詳解
    • 詳解機(jī)器學(xué)習(xí)中的梯度消失、爆炸原因及其解決方法
    • 梯度爆炸和梯度消失的本質(zhì)原因
    • 深度學(xué)習(xí)中Dropout原理解析
    • 理解神經(jīng)網(wǎng)絡(luò)中的Dropout

    總結(jié)

    以上是生活随笔為你收集整理的【NLP】Task5:神经网络基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。