四虎欧美在线观看免费,国产全黄a一级毛片视频,狠狠色成人综合,福利片国产,国自产拍亚洲免费视频,浓厚な接吻と肉体の交わり,国产精品久久久久久亚洲伦理

您當前的位置是:  首頁 > 新聞 > 文章精選 >
 首頁 > 新聞 > 文章精選 >

基于TensorFlow 的神經網絡語言模型

2018-01-04 09:43:34   作者:   來源:CTI論壇   評論:0  點擊:


  當前無論是學術界還是工業(yè)界,深度學習都受到極大的追捧。Google在2015年11月推出開源深度學習平臺TensorFlow,由于其靈活性和高效性,不僅促進學術界的研究進程,同時提供了解決大量實際問題優(yōu)秀的工具。普強一直致力于為客戶提供高效精準的語音識別服務,在語音識別技術框架中,語言模型是一個最基本的組成模塊,能夠對語音識別的準確率產生重要影響。本文主要介紹深度學習在語言模型中的相關應用,以及如何利用TensorFlow平臺產品化上述技術,提高普強語音識別技術創(chuàng)新性及競爭力。
  人工神經網絡
  人工神經網絡(Artificial Neural Network,ANN)是一組大致模仿人類大腦構造設計的計算機算法或數學模型,屬于機器學習(Machine Learning,ML)方法中的一類,適合于處理語音,圖像,文本等數據,賦予計算機處理有關人類認知方面問題的能力,如語音識別,圖像識別,自然語言理解等。
  人工神經網絡的基本組成單元稱為一個神經元,其結構如下圖所示:
  一般而言,一個神經元可以接受多個輸入經過一些線性或非線性變換后轉化成一個輸出值。神經元內部的這個變換函數稱為激活函數(activation function),常用的激活函數包括:sigmoid,tanh,RELU等。
  人工神經網絡的神經元可以看成一種簡化版的生物神經元。我們知道,生物神經元通過細胞體上的樹突接收其他神經元的信號,而通過軸突向其他神經元傳遞信號;并且通常一個神經元有一個至多個樹突,但軸突只有一條。
  顯然,單個神經元能夠進行的處理和計算能力有限,因此類似生物的大腦,我們可以將許多個的神經元連接起來,組成一個更大規(guī)模的網絡,這個網絡就是人工神經網絡,例如下圖中這樣:
  出于計算的考慮,人工神經網絡中的神經元不會像生物大腦中那樣隨意的連接,而是形成相對簡單的分層結構。一般的基本組成包括:
  • 輸入層(input layer):每個網絡中只有一個,處于這一層神經元用于接收輸入數據;
  • 隱藏層(hiddeng layer):每個網絡可以由零個或多個,這部分神經元對輸入進行變換,分析和計算;
  • 輸出層(output layer):每個網絡中只有一個,這一層中的神經元對來自隱藏層或輸入層的數據進行最后的處理,并輸出最終結果。
  深度學習
  深度學習(Deep Learning,DL),顧名思義,指的使用是隱藏層的數目較大的深層神經網絡(Deep Neural Network,DNN)為模型的機器學習方法。
  傳統(tǒng)神經網絡主要使用由一個輸入層和一個輸出層組成的淺層網絡,至多在兩層之間添加一個隱藏層。三層以上(包括輸入和輸出層在內)的系統(tǒng)就可以稱為“深度”學習。
  在深度學習網絡中,每一個節(jié)點層在前一層輸出的基礎上學習識別一組特定的特征。隨著神經網絡深度增加,節(jié)點所能識別的特征也就越來越復雜,因為每一層會整合并重組前一層的特征。隨著特征越來越復雜,它們的抽象度也越來越高,可能會與人類大腦中的某些高層語義概念相對應,因而,使用這些特征能夠更有利于和認知有關任務的處理。
  深度的重要性可以在一些圖像識別任務中直觀的看到,如下圖所展示的人臉識別深度模型:
  (圖源:Key Concepts of Deep Neural Networks)
  觀察圖片左邊部分,我們可以看到,隨著層數的增加,神經網絡學習到的特征越來越抽象。網絡的第一層的特征只是一些簡單紋理,方向等線條,第二層通過第一層得到的線條組成了一些臉部的局部細節(jié),最終在第三層通過組合上一層的各個局部,形成一幅幅人臉的圖像。
  遞歸神經網絡
  前面我們舉的例子中,神經元之間的連接只在相鄰的層之間,并且是單方向的,這種類型的神經網絡統(tǒng)稱為前饋神經網絡(Feed Forward Neural Network)。前饋神經網絡的這種結構特性使得它在處理每個輸入時,是不考慮之前的輸入的,這僅對輸入數據點之間是獨立的應用有效。而許多實際的應用場景,每個輸入點的值會對其他輸入點的值有所依賴。這時,我們需要使用另一種結構的神經網絡,即遞歸神經網絡(Recurrent Neural Network,RNN),這種網絡更適合處理時間序列的輸入數據,如語音,手寫識別,文本等。
  遞歸神經網絡與前饋神經網絡的主要區(qū)別在于,遞歸神經網絡的神經元在前饋神經網絡神經元的基礎,增加了一條到自身的連接,也就是說,神經元上一個時刻的輸出會作為下一時刻的輸入反饋給自身。如圖所示,
  通過這條自反饋連接,RNN把處理過的歷史數據都存儲在它的狀態(tài)向量中,并且把它與輸入數據一并送給神經元處理。由于這部分額外信息的獲取,使得RNN具有更強的記憶和學習能力。
  LSTM
  歷史信息使得RNN具備較強的記憶能力,但是同時也使RNN的學習過程變得更加困難。
  RNN的學習通常使用的是沿時間反向傳播(BackPropagation Through Time,BPTT)算法,這個算法需要多次連乘權重矩陣,這樣就很容易出現極小或極大的數值,使得訓練不穩(wěn)定,這個問題被稱為梯度消失(vanishing gradients)或梯度爆炸(exploding gradients)問題。
  為解決上述問題,學者設計出一種稱為長短期記憶(Long-Short Term Memory,LSTM)的模型。LSTM在RNN神經元的基礎上,加入了三個門(gate),對模型的記憶內容進行精細的控制。一般使用的LSTM包含三個門:
  • 輸入門(inputgate),控制輸入數據權重;
  • 忘記門(forgetgate),控制歷史信息權重;
  • 輸出門(outputgate),控制輸出結果權重。
  LSTM神經元的結構,如下圖所示,
  使用LSTM能夠使RNN模型的訓練過程更穩(wěn)定,學習更有效。
  TensorFlow
  為了加速深度學習領域的發(fā)展,2015年11月9日,Google發(fā)布深度學習框架TensorFlow并宣布開源。在不到一年時間內,在GitHub上,TensorFlow就成為了最流行的深度學習項目。TensorFlow在圖形分類、音頻處理、推薦系統(tǒng)和自然語言處理等場景下都有豐富的應用。
  TensorFlow是一個深度學習框架,支持Linux平臺,Windows平臺,Mac平臺,甚至手機移動設備等各種平臺。其次,TensorFlow提供了非常豐富的深度學習相關的API,可以說目前所有深度學習框架里,提供的API最全的,包括基本的向量矩陣計算、各種優(yōu)化算法、各種卷積神經網絡和循環(huán)神經網絡基本單元的實現、以及可視化的輔助工具等等。
  TensorFlow的特點包括:
  • 高度的靈活性
  TensorFlow并不僅僅是一個深度學習庫,只要可以把你的計算過程表示稱一個數據流圖的過程,我們就可以使用TensorFlow來進行計算。TensorFlow允許我們用計算圖的方式還建立計算網絡,同時又可以很方便的對網絡進行操作。用戶可以基于TensorFlow的基礎上用Python編寫自己的上層結構和庫,如果TensorFlow沒有提供我們需要的API的,我們也可以自己編寫底層的C++代碼,通過自定義操作將新編寫的功能添加到TensorFlow中。
  • 真正的可移植性
  TensorFlow可以在CPU和GPU上運行,可以在臺式機,服務器,甚至移動設備上運行。
  • 多語言支持
  TensorFlow采用非常易用的python來構建和執(zhí)行我們的計算圖,同時也支持C++的語言。我們可以直接寫python和C++的程序來執(zhí)行TensorFlow,也可以采用交互式的ipython來方便的嘗試我們的想法。
  • 豐富的算法庫
  TensorFlow提供了所有開源的深度學習框架里,最全的算法庫,并且在不斷的添加新的算法庫。這些算法庫基本上已經滿足了大部分的需求,對于普通的應用,基本上不用自己再去自定義實現基本的算法庫了。
  • 完善的文檔
  TensorFlow的官方網站,提供了非常詳細的文檔介紹,內容包括各種API的使用介紹和各種基礎應用的使用例子,也包括一部分深度學習的基礎理論。
  語言模型
  語言模型是一種概率模型,它是基于一個語料庫創(chuàng)建,得到每個句子出現的概率。語言模型在語音識別中起到重要的作用,如果沒有語言模型,語音識別的結果只能是一些發(fā)音正確的詞語或單字,卻不一定能組成有意義的句子。關于語音識別原理的詳細介紹,請參見我們的上一篇文章。
  傳統(tǒng)的N-gram語言模型數學上表示為:
  上述公式的意義是:一個句子出現的概率等于給定前面的詞情況下,緊接著后面的詞出現的概率。它是通過條件概率公式展開得到。其中條件概率P(w2|w1),P(w3|w1w2),?,P(wt|w1w2?wt?1)就是創(chuàng)建語言模型所需要的參數,每個條件概率的意義解釋為:根據前面的詞預測下一個詞的概率。有了這些條件概率參數,給定一個句子,就可以通過以上公式得到一個句子出現的概率。句子的概率越大,說明它越接近自然語言的表達。
  神經網絡的語言模型則是使用神經網絡來建模句子的概率。將句子中的詞按順序逐個輸入給一個神經網絡,在每次得到的輸出中找到下一個詞的概率,最后將句子中所有詞的概率連乘,就得到了這個句子的概率。
  語言模型中下一個詞的概率顯然和之前歷史的詞有非常大的依賴關系,因此,LSTM比較適合于應用在語言模型建模中。
  基于TensorFlow的LSTM語言模型
  根據以上原理,我們就可以利用TensorFlow來實現LSTM語言模型了。根據以上原理,我們就可以利用TensorFlow來實現LSTM語言模型了。
  • 模型訓練
  首先,掃描語料庫建立字典,并為每個詞編號。
  第二步,需要建立TensorFlow的計算流圖,在其中定義要使用的LSTM模型。這里的使用模型是一個N+2層的LSTM,其中第一層是輸入層,又叫做詞向量矩陣,然后是N層的LSTM隱藏層,最后連接的是輸出層。輸出層的神經元個數與詞典中詞數相同,每個神經元輸出的值就是它所對應的詞的概率大小。
  第三步,使用BPTT算法訓練模型。這時我們需要優(yōu)化目標函數,采用梯度下降逐步更新參數。
  梯度下降算法最重要的參數就是學習率,需要人工設置一個合適的值,學習率太大容易造成訓練過程不穩(wěn)定,太小則會使得學習過程太慢。一般而言,我們會在一次訓練的過程中,逐步減小學習率,最終使得訓練收斂。
  將上面所述轉化為代碼后,使用TensorFlow運行,我們就可以得到最終的模型。
  • 模型評價
  對于任何一種機器學習模型,我們都需要使用某種方法評價它的好壞。在語言模型領域,使用最多的是一種稱為困惑度(Perplexity,PPL)的指標。其基本思想是給測試集的句子賦予較高概率值的語言模型較好,公式如下:
  可以看出,困惑度和概率成反比,概率越高,困惑度越低,語言模型越好。
  使用TensorFlow進行模型評估時,代碼和訓練時基本一樣,只需要把最后運行的梯度下降的去掉。得到每一個詞的概率后,就可以通過上面的公式計算PPL了。在PennTreeBank(PTB)數據集(訓練集包含929k個詞)上,不同模型的PPL如下:

模型

PPL

N-gram

141

RNN

123

LSTM

82

 
  顯然,基于神經網絡的模型效果優(yōu)于傳統(tǒng)的Ngram模型,而LSTM模型比RNN更優(yōu)。
【免責聲明】本文僅代表作者本人觀點,與CTI論壇無關。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

專題