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

歡迎訪問 生活随笔!

生活随笔

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

pytorch

深度学习(三十)——Deep Speech, 自动求导

發(fā)布時間:2023/12/20 pytorch 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习(三十)——Deep Speech, 自动求导 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CTC

推斷計算(續(xù))

上圖是一個Beam Width為3的Beam Search。Beam Search的細節(jié)可參見《機器學習(二十三)》。

由于語音的特殊性,我們實際上用的是Beam Search的一個變種:

如上圖所示,所有在合并規(guī)則下,能夠合并為同一前綴的分支,在后續(xù)計算中,都被認為是同一分支。其概率值為各被合并分支的概率和。

此外,如果在語音識別中,能夠結合語言模型的話,將可以極大的改善語音識別的準確率。這種情況下的CTC loss為:

Y?=argmaxYp(Y∣X)?p(Y)α?L(Y)βY^*=\mathop{\text{argmax}}_{Y} p(Y \mid X)\cdot p(Y)^{\alpha}\cdot L(Y)^{\beta}Y?=argmaxY?p(YX)?p(Y)α?L(Y)β

其中,p(Y)αp(Y)^{\alpha}p(Y)α是語言模型概率,而L(Y)βL(Y)^{\beta}L(Y)β表示詞嵌入獎勵。

CTC的特性

CTC是條件獨立的。

缺點:條件獨立的假設太強,與實際情況不符,因此需要語言模型來改善條件依賴性,以取得更好的效果。

優(yōu)點:可遷移性比較好。比如朋友之間的聊天和正式發(fā)言之間的差異較大,但它們的聲學模型卻是類似的。

CTC是單調對齊的。這在語音識別上是沒啥問題的,但在機器翻譯的時候,源語言和目標語言之間的語序不一定一致,也就不滿足單調對齊的條件。

CTC的輸入/輸出是many-to-one的,不支持one-to-one或one-to-many。比如,“th”在英文中是一個音節(jié)對應兩個字母,這就是one-to-many的案例。

最后,Y的數量不能超過X,否則CTC還是沒法work。

CTC應用

HMM

如上圖所示,CTC是一種特殊的HMM。CTC的狀態(tài)圖是單向的,這也就是上面提到的單調對齊特性,這相當于給普通HMM模型提供了一個先驗條件。因此,對于滿足該條件的情況,CTC的準確度要超過HMM。

最重要的是,CTC是判別模型,它可以直接和RNN對接。

Encoder-Decoder模型

Encoder-Decoder模型是sequence問題最常用的框架,它的數學形式為:

H=encode(X)p(Y∣X)=decode(H)H=encode(X)\\ p(Y\mid X)=decode(H) H=encode(X)p(YX)=decode(H)

這里的H是模型的hidden representation。

CTC模型可以使用各種Encoder,只要保證輸入比輸出多即可。CTC模型常用的Decoder一般是softmax。

參考

https://distill.pub/2017/ctc/

Sequence Modeling With CTC

http://blog.csdn.net/laolu1573/article/details/78791992

Sequence Modeling With CTC中文版

https://mp.weixin.qq.com/s?__biz=MzIzNDQyNjI5Mg==&mid=2247483834&idx=1&sn=3a92eb19858d2cec709af28d2eb69c4a

時序分類算法之Connectionist Temporal Classification

http://blog.csdn.net/u012968002/article/details/78890846

CTC原理

https://www.zhihu.com/question/47642307

語音識別中的CTC方法的基本原理

https://www.zhihu.com/question/55851184

基于CTC等端到端語音識別方法的出現是否標志著統(tǒng)治數年的HMM方法終結?

https://zhuanlan.zhihu.com/p/23308976

CTC——下雨天和RNN更配哦

https://zhuanlan.zhihu.com/p/23293860

CTC實現——compute ctc loss(1)

https://zhuanlan.zhihu.com/p/23309693

CTC實現——compute ctc loss(2)

http://blog.csdn.net/xmdxcsj/article/details/70300591

端到端語音識別(二)ctc。這個blog中還有5篇《CTC學習筆記》的鏈接。

https://blog.csdn.net/luodongri/article/details/77005948

白話CTC(connectionist temporal classification)算法講解

Warp-CTC

Warp-CTC是一個可以應用在CPU和GPU上的高效并行的CTC代碼庫,由百度硅谷實驗室開發(fā)。

官網:

https://github.com/baidu-research/warp-ctc

非官方caffe版本:

https://github.com/xmfbit/warpctc-caffe

Deep Speech

Deep Speech是吳恩達領導的百度硅谷AI Lab 2014年的作品。

論文:

《Deep Speech: Scaling up end-to-end speech recognition》

代碼:

https://github.com/mozilla/DeepSpeech

上圖是Deep Speech的網絡結構圖。網絡的前三層和第5層是FC,第4層是雙向RNN,Loss是CTC。

主要思路:

1.這里的FC只處理部分音頻片段,因此和CNN有異曲同工之妙。

2.論文解釋了不用LSTM的原因是:很難并行處理。

參考:

http://blog.csdn.net/xmdxcsj/article/details/54848838

Deep Speech筆記

Deep speech 2

Deep speech 2是Deep speech原班人馬2015年的作品。

論文:

《Deep speech 2: End-to-end speech recognition in english and mandarin》

代碼:

https://github.com/PaddlePaddle/DeepSpeech

這個官方代碼是PaddlePaddle實現的,由于比較小眾,所以還有非官方的代碼:

https://github.com/ShankHarinath/DeepSpeech2-Keras

不出所料,這里使用CNN代替了FC,音頻數據和圖像數據一樣,都是局部特征很明顯的數據,從直覺上,CNN應該要比FC好使。

至于多層RNN或者GRU都是很自然的嘗試。論文的很大篇幅都是各種調參,也就是俗稱的“深度煉丹”。

論文附錄中,如何利用集群進行分布式訓練,是本文的干貨,這里不再贅述。

EESEN

論文:

《EESEN: End-to-End Speech Recognition using Deep RNN Models and WFST-based Decoding》

苗亞杰,南京郵電大學本科(2008)+清華碩士(2011)+CMU博士(2016)。
個人主頁:
http://www.cs.cmu.edu/~ymiao/

官網:

https://github.com/srvk/eesen

eesen是基于Tensorflow開發(fā)的,苗博士之前還有個用Theano開發(fā)的叫PDNN的庫。

自動求導

DL發(fā)展到現在,其基本運算單元早就不止CNN、RNN之類的簡單模塊了。針對新運算層出不窮的現狀,各大DL框架基本都實現了自動求導的功能。

論文:

《Automatic Differentiation in Machine Learning: a Survey》

Numerical differentiation

數值微分最大的特點就是很直觀,好計算,它直接利用了導數定義:

f′(x)=lim?h→0f(x+h)?f(x)hf'(x)=\lim_{h\to 0}{f(x+h)-f(x)\over h}f(x)=h0lim?hf(x+h)?f(x)?

不過這里有一個很大的問題:h怎么選擇?選大了,誤差會很大;選小了,不小心就陷進了浮點數的精度極限里,造成舍入誤差。

第二個問題是對于參數比較多時,對深度學習模型來說,上面的計算是不夠高效的,因為每計算一個參數的導數,你都需要重新計算f(x+h)f(x+h)f(x+h)

因此,這種方法并不常用,而主要用于做梯度檢查(Gradient check),你可以用這種不高效但簡單的方法去檢查其他方法得到的梯度是否正確。

Symbolic differentiation

符號微分的主要步驟如下:

1.需要預置基本運算單元的求導公式。

2.遍歷計算圖,得到運算表達式。

3.根據導數的代入法則和四則運算法則,求出復雜運算的求導公式。

這種方法沒有誤差,是目前的主流,但遍歷比較費時間。

Automatic differentiation

除此之外,常用的自動求導技術,還有Automatic differentiation。(請注意這里的AD是一個很狹義的概念。)

類比復數的概念:

x=a+bi(i2=?1)x = a + bi \quad (i^2 = -1)x=a+bi(i2=?1)

我們定義Dual number:

x?x=x+x˙d(d2=0)x \mapsto x = x + \dot{x} d \quad (d^2=0)x?x=x+x˙d(d2=0)

定義Dual number的運算法則:

(x+x˙d)+(y+y˙d)=x+y+(x˙+y˙)d(x + \dot{x}d) + ( y + \dot{y}d) = x + y + (\dot{x} + \dot{y})d(x+x˙d)+(y+y˙?d)=x+y+(x˙+y˙?)d

(x+x˙d)(y+y˙d)=xy+x˙yd+xy˙d+x˙y˙d2=xy+(x˙y+xy˙)d(x + \dot{x}d) ( y + \dot{y}d) = xy + \dot{x}yd + x\dot{y}d + \dot{x}\dot{y}d^2 = xy + (\dot{x}y+ x\dot{y})d(x+x˙d)(y+y˙?d)=xy+x˙yd+xy˙?d+x˙y˙?d2=xy+(x˙y+xy˙?)d

?(x+x˙d)=?x?x˙d-(x + \dot{x}d) = - x - \dot{x}d?(x+x˙d)=?x?x˙d

1x+x˙d=1x?x˙x2d\frac{1}{x + \dot{x}d} = \frac{1}{x} - \frac{\dot{x}}{x^2}dx+x˙d1?=x1??x2x˙?d

dual number有很多非常不錯的性質。以下面的指數運算多項式為例:

f(x)=p0+p1x+p2x2+...+pnxnf(x) = p_0 + p_1x + p_2x^2 + ... + p_nx^nf(x)=p0?+p1?x+p2?x2+...+pn?xn

x+x˙dx + \dot{x}dx+x˙d替換x,則有:

f(x+x˙d)=p0+p1(x+x˙d)+...+pn(x+x˙d)n=p0+p1x+p2x2+...+pnxn+p1x˙d+2p2xx˙d+...+npn?1xx˙d=f(x)+f′(x)x˙df(x + \dot{x}d) = p_0 + p_1(x + \dot{x}d) + ... + p_n(x + \dot{x}d)^n \\ = p_0 + p_1x + p_2x^2 + ... + p_nx^n + \\ p_1\dot{x}d + 2p_2x\dot{x}d + ... + np_{n-1}x\dot{x}d\\ = f(x) + f'(x)\dot{x}df(x+x˙d)=p0?+p1?(x+x˙d)+...+pn?(x+x˙d)n=p0?+p1?x+p2?x2+...+pn?xn+p1?x˙d+2p2?xx˙d+...+npn?1?xx˙d=f(x)+f(x)x˙d

可以看出d的系數就是f′(x)f'(x)f(x)

參考

https://mp.weixin.qq.com/s/7Z2tDhSle-9MOslYEUpq6g

從概念到實踐,我們該如何構建自動微分庫

https://mp.weixin.qq.com/s/bigKoR3IX_Jvo-re9UjqUA

機器學習之——自動求導

https://www.jianshu.com/p/4c2032c685dc

自動求導框架綜述

https://mp.weixin.qq.com/s/xXwbV46-kTobAMRwfKyk_w

自動求導–Deep Learning框架必備技術二三事

總結

以上是生活随笔為你收集整理的深度学习(三十)——Deep Speech, 自动求导的全部內容,希望文章能夠幫你解決所遇到的問題。

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