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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习(二十九)——Normalization进阶, CTC

發布時間:2023/12/20 pytorch 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(二十九)——Normalization进阶, CTC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Normalization進階

和Batch Normalization類似的概念還有Weight Normalization和Layer Normalization。

Batch Normalization

從上圖可以看出,BN是對input tensor的每個通道進行mini-batch級別的Normalization。而LN則是對所有通道的input tensor進行Normalization

BN的特點:

對于batch size比較小的時候,效果非常不好,而batch size越大,那么效果則越好,因為其本質上是要通過mini-batch得到對整個數據集的無偏估計;

在訓練階段和推理階段的計算過程是不一樣的;

在CNN上表現較好,而不適用于RNN甚至LSTM。

Layer Normalization

LN的特點:

不依賴于batch size的大小,即使對于batch size為1的在線學習,也可以完美適應;

訓練階段和推理階段的計算過程完全一樣。

適用于RNN或LSTM,而在CNN上表現一般。

Weight Normalization

WN的公式如下:

w=g∥v∥vw=\frac{g}{\|v\|}vw=vg?v

WN將權重分為模和方向兩個分量,并分別進行訓練。

論文:

《Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks》

WN的特點:

計算簡單,易于理解。

相比于其他兩種方法,其訓練起來不太穩定,非常依賴于輸入數據的分布。

Cosine Normalization

Normalization還能怎么做?

我們再來看看神經元的經典變換fw(x)=w?xf_w(x)=w\cdot xfw?(x)=w?x

對輸入數據x的變換已經做過了,橫著來是LN,縱著來是BN。

對模型參數w的變換也已經做過了,就是WN。

好像沒啥可做的了。然而天才的研究員們盯上了中間的那個點,對,就是?\cdot?

fw(x)=cos?θ=w?x∥w∥?∥x∥f_w(x)=\cos \theta=\frac{w\cdot x}{\|w\|\cdot\|x\|}fw?(x)=cosθ=w?xw?x?

參考:

https://mp.weixin.qq.com/s/EBRYlCoj9rwf0NQY0B4nhQ

Layer Normalization原理及其TensorFlow實現

http://mlexplained.com/2018/01/10/an-intuitive-explanation-of-why-batch-normalization-really-works-normalization-in-deep-learning-part-1/

An Intuitive Explanation of Why Batch Normalization Really Works

http://mlexplained.com/2018/01/13/weight-normalization-and-layer-normalization-explained-normalization-in-deep-learning-part-2/

Weight Normalization and Layer Normalization Explained

https://mp.weixin.qq.com/s/KnmQTKneSimuOGqGSPy58w

詳解深度學習中的Normalization,不只是BN(1)

https://mp.weixin.qq.com/s/nSQvjBRMaBeoOjdHbyrbuw

詳解深度學習中的Normalization,不只是BN(2)

CTC

概述

Connectionist Temporal Classification,是一種改進的RNN模型。它主要解決的是時序模型中,輸入數大于輸出數,輸入輸出如何對齊的問題。它由Alex Graves于2006年提出。

論文:

《Connectionist Temporal Classification: Labelling Unsegmented
Sequence Data with Recurrent Neural Networks》

Alex Graves,瑞士IDSIA研究所博士,DeepMind研究員。

上圖展示了音頻數據被識別的過程:

1.將音頻數據均分成若干段,每段匹配一個音節。

2.合并重復的音節,并去掉分割音節(即上圖中的?\epsilon?)。

相比于圖像識別,人類語音的音節種類要少的多。但麻煩的是,一個音節的長短,會由于語速等因素的改變,而有較大差異。因此如何將數據段和音節匹配,成為了語音識別的難點。

這個問題不只是在語音識別中出現,我們在其他許多地方也能看到它。比如手寫體識別、視頻行為標注等。

我們首先用數學的方式定義對齊問題。假設輸入序列為X=[x1,x2,…,xT]X=[x_1,x_2,\dots,x_T]X=[x1?,x2?,,xT?],輸出序列為Y=[y1,y2,…,yU]Y=[y_1,y_2,\dots,y_U]Y=[y1?,y2?,,yU?],所謂對齊問題就是將X映射到Y。

這里的主要問題在于:

1.X和Y的長度可以變。

2.X和Y的長度比例可變。

3.我們沒有一個X和Y之間的準確的對齊(對應元素)。

CTC算法可以克服這些挑戰。對于一個給定的X,它給我們一個所有可能Y值的輸出分布。我們可以使用這個分布來推斷可能的輸出或者評估一個給定輸出的概率。

并不是所有的計算損失函數和執行推理的方法都是易于處理的。我們要求CTC可以有效地做到這兩點。

損失函數:對于給定的輸入,我們希望訓練模型來最大化分配到正確答案的概率。 為此,我們需要有效地計算條件概率p(Y∣X)p(Y \mid X)p(YX)。 函數p(Y∣X)p(Y \mid X)p(YX)也應該是可微的,可以使用梯度下降。

推理:在我們訓練好模型后,我們希望使用它來推斷給定X的最可能的Y。即:

Y?=argmaxYp(Y∣X)Y^*=\mathop{\text{argmax}}_{Y} p(Y \mid X)Y?=argmaxY?p(YX)

算法推導

為了推導CTC對齊的具體形式,我們首先考慮一種初級的做法:假設輸入長度為6,Y=[c,a,t],對齊X和Y的一種方法是將輸出字符分配給每個輸入步驟并折疊重復的部分。

這種方法存在兩個問題:

1.通常,強制每個輸入步驟與某些輸出對齊是沒有意義的。例如在語音識別中,輸入可以具有無聲的延伸,但沒有相應的輸出。

2.我們沒有辦法產生連續多個字符的輸出。考慮這個對齊[h,h,e,l,l,l,o],折疊重復將產生“helo”而不是“hello”。

為了解決這些問題,CTC為一組允許的輸出引入了一個新的標記。這個新的標記有時被稱為空白標記。我們在這里將其稱為?\epsilon?,,?\epsilon?標記不對應任何東西,可以從輸出中移除。

CTC允許的對齊是與輸入的長度相同。 在合并重復并移除?\epsilon?標記后,我們允許任何映射到Y的對齊方式。

如果Y在同一行中有兩個相同的字符,那么一個有效的對齊必須在它們之間有一個?\epsilon?。有了這個規則,我們就可以區分“hello”和“helo”了。

CTC對齊有一些顯著的特性:

首先,X和Y之間允許的對齊是單調的。如果我們前進到下一個輸入,我們可以保持相應的輸出相同或前進到下一個輸入。

第二個屬性是X到Y的對齊是多對一的。一個或多個輸入元素可以對齊到一個輸出元素,但反過來不成立。

這意味著第三個屬性:Y的長度不能大于X的長度。

上圖是CTC對齊的一般步驟:

1.輸入序列(如音頻的頻譜圖)導入一個RNN模型。

2.RNN給出每個time step所對應的音節的概率pt(a∣X)p_t(a \mid X)pt?(aX)。上圖中音節的顏色越深,其概率p越高。

3.計算各種時序組合的概率,給出整個序列的概率。

4.合并重復并移除空白之后,得到最終的Y。

嚴格的說,一對(X,Y)的CTC目標函數是:

p(Y∣X)=∑A∈AX,Y∏t=1Tpt(at∣X)p(Y\mid X)=\sum_{A\in A_{X,Y}}\prod_{t=1}^Tp_t(a_t\mid X)p(YX)=AAX,Y??t=1T?pt?(at?X)

這里的模型通常使用一個RNN來估計每個time step的概率,但是也可以自由使用任何學習算法,在給定一個固定尺寸輸入片段的情況下產生一個輸出類別的分布。

在實際訓練中,針對訓練集D\mathcal{D}D,一般采用最小化log-likelihood的方式計算CTC loss:

∑(X,Y)∈D?log?p(Y∣X)\sum_{(X,Y)\in \mathcal{D}}-\log p(Y\mid X)(X,Y)D??logp(YX)

采用窮舉法計算上述目標函數,計算量是非常巨大的。我們可以使用動態規劃算法更快的計算loss。關鍵點是,如果兩個對齊在同一步已經達到了相同的輸出,可以合并它們。如下圖所示:

這里如果把音節匹配換成擲骰子的例子,就可以看出這實際上和《機器學習(二十二)》中HMM所解決的第二個問題是類似的,而HMM的前向計算正是一種動態規劃算法。動態規劃算法可參見《機器學習(二十七)》。

下面我們來介紹一下具體的計算方法。

首先使用?\epsilon?分隔Y中的符號,就得到了序列Z:

Z=[?,y1,?,y2,…,?,yU,?]Z=[\epsilon,y_1,\epsilon,y_2,\dots,\epsilon,y_U,\epsilon]Z=[?,y1?,?,y2?,,?,yU?,?]

αs,t\alpha_{s,t}αs,t?表示子序列Z1:sZ_{1:s}Z1:s?在t步之后的CTC值。顯然,我們需要計算的目標P(Y∣X)P(Y\mid X)P(YX)和最后一步的α\alphaα有關,但只有計算出了上一步的α\alphaα,我們才能計算當前的α\alphaα

不同于擲骰子過程中,骰子的每種狀態都有可能出現的情況,語音由于具有連續性,因此有些情況實際上是不可能的。比如上圖的x1x_1x1?就不大可能是后三個符號。

所以,可能的情況實際上只有兩種:

Case 1

上圖表示的是語音在兩個相同token之間切換的情況。(這種情況也就是上面提到的hello例子中,語音在兩個l之間過渡的情況。)

在這種情況下,α\alphaα的計算公式如下:

αs,t=(αs?1,t?1+αs,t?1)?pt(Zs∣X)\alpha_{s,t}=(\alpha_{s-1,t-1}+\alpha_{s,t-1})\cdot p_t(Z_s \mid X)αs,t?=(αs?1,t?1?+αs,t?1?)?pt?(Zs?X)

Case 2

上圖表示的是語音在兩個不同token之間切換的情況。

在這種情況下,α\alphaα的計算公式如下:

αs,t=(αs?2,t?1+αs?1,t?1+αs,t?1)?pt(Zs∣X)\alpha_{s,t}=(\alpha_{s-2,t-1}+\alpha_{s-1,t-1}+\alpha_{s,t-1})\cdot p_t(Z_s \mid X)αs,t?=(αs?2,t?1?+αs?1,t?1?+αs,t?1?)?pt?(Zs?X)

推斷計算

我們首先看看CTC的正向推斷(Inference)是如何計算的。

在前面的章節我們已經指出,由于對齊有很多種可能的情況,采用窮舉法是不現實的。

另一個比較容易想到的方法是:每步只采用最大可能的token。這種啟發式算法,實際上就是A*算法。

A*算法計算速度快,但不一定能找到最優解。

一般采用改良的Beam Search算法,在準確率和計算量上取得一個trade off。

總結

以上是生活随笔為你收集整理的深度学习(二十九)——Normalization进阶, CTC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。