深度學習基礎 | 從Language Model到RNN

2022-01-06 AINLP

循環神經網絡 (RNN) 是一種流行的「序列數據」算法,被 Apple 的 Siri 和 Google 的語音搜索使用。RNN使用內部存儲器(internal memory)來記住其輸入,這使其非常適合涉及序列數據的機器學習問題。

本文介紹引入RNN的問題--Language Model,並介紹RNN的重要公式,作為Stanford cs224n lecture6的總結和補充。

1. Language Model

在介紹RNN之前,我們先介紹最初引入RNN的問題---「Language Modeling」

「定義:」 Language Modeling就是預測下一個出現的詞的概率的任務。(Language Modeling is the task of predicting what word comes next.)


即:

1.1 統計學方法:n-gram language model

簡化:一個詞出現的概率只和它前面的n-1個詞有關係,這就是"n-gram"的含義。因此有:

n-gram model 是不使用深度學習的方法,直接利用「條件概率」來預測下一個單詞是什麼。但這個模型有幾個問題:

由於丟棄了比較遠的單詞,它不能夠把握全局信息。例如,「as the proctor started the clock」 暗示這應該是一場考試,所以應該是students opened their 「exam」. 但如果只考慮4-gram,的確是book出現的概率更大。sparsity problem. 有些短語根本沒有在語料中出現過,比如"student opened their petri-dishes". 所以,petri-dishes的概率為0. 但是這的確是一個合理的情況。解決這個問題的辦法是做拉普拉斯平滑,對每個詞都給一個小權重。sparsity problem的一個更加糟糕的情況是,如果我們甚至沒有見過"student open their",那麼分母直接就是0了。對於這種情況,可以回退到二元組,比如"student open".這叫做backoff1.2 neural language model

想要求"the students opened their"的下一個詞出現的概率,首先將這四個詞分別embedding,之後過兩層全連接,再過一層softmax,得到詞彙表中每個詞的概率分布。我們只需要取概率最大的那個詞語作為下一個詞即可。

「優點:」

解決了sparsity problem, 詞彙表中的每一個詞語經過softmax都有相應的概率。解決了存儲空間的問題,不用存儲所有的n-gram,只需存儲每個詞語對應的word embedding即可。

「缺點:」

窗口的大小還是不能無限大,不能涵蓋之前的所有信息。更何況,增加了窗口大小,就要相應的增加「權重矩陣W」的大小。每個詞語的word embedding只和權重矩陣W對應的列相乘,而這些列是完全分開的。所以這幾個不同的塊都要學習相同的pattern,造成了浪費。2. RNN

正因為上面所說的缺點,需要引入RNN。

2.1 RNN模型介紹

「RNN的結構:」

首先,將輸入序列的每個詞語都做embedding,之後再和矩陣

「RNN的優勢:」

前面很遠的信息也不會丟失(這樣我們就可以看到前面的"as the proctor start the clock",從而確定應該是"student opened their exam"而不是"student opened their books").模型的大小不會隨著輸入序列變長而變大。因為我們只需要

「RNN的壞處:」

實際上,不太能夠利用到很久以前的信息,因為梯度消失。2.2 RNN模型的訓練首先拿到一個非常大的文本序列

我們已知一個真實的詞語序列

即,困惑度和交叉熵loss的指數相等。

2.4 基礎RNN的應用

(1)生成句子序列

每一步最可能的輸出作為下一個的輸入詞,這個過程可以一直持續下去,生成任意長的序列。

(2)詞性標註

每個隱藏層都會輸出

(3)文本分類

其實RNN在這個問題上就是為了將一長串文本找到一個合適的embedding。當使用最後一個隱藏狀態作為embedding時:


當使用所有隱藏狀態輸出的平均值作為embedding時:

本文參考資料
[1]

cs224n-2019-lecture06: https://web.stanford.edu/class/cs224n/slides/cs224n-2019-lecture06-rnnlm.pdf


END -


進技術交流群請添加AINLP小助手微信(id: ainlper)

關於AINLP

AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。

閱讀至此了,分享、點讚、在看三選一吧🙏

相關焦點

  • Char RNN原理介紹以及文本生成實踐
    Char-RNN模型是從字符的維度上,讓機器生成文本,即通過已經觀測到的字符出發,預測下一個字符出現的概率,也就是序列數據的推測。現在網上介紹的用深度學習寫歌、寫詩、寫小說的大多都是基於這個方法。在基本的RNN單元中,只有一個隱藏狀態,對於長距離的記憶效果很差(序列開始的信息在後期保留很少),而且存在梯度消失的問題,因此誕生了許多變體,如LSTM、GRU等。
  • 深度學習算法(第16期)----靜態RNN和動態RNN
    收錄於話題 #深度學習入門X0 = tf.placeholder(tf.float32, [None, n_inputs])X1 = tf.placeholder(tf.float32, [None, n_inputs])basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)
  • 深度學習RNN實現股票預測實戰(附數據、代碼)
    RNN是一種深度學習的網絡結構,RNN的優勢是它在訓練的過程中會考慮數據的上下文聯繫,非常適合股票的場景,因為某一時刻的波動往往跟之前的走勢蘊含某種聯繫。這裡做了一次歸一化,因為股票在50年的市值是每股19塊左右,到了2017年漲到了2600多塊,分布很不均勻,於是通過把每天股票close值除以歷史股票最高值,將所有數據的定義域限定在0到1之間。
  • 深度學習建模方法,首先需要了解建模的思路
    人工智慧領域發展到現在,已經不像人們認為的那樣遙不可及,只要編程熟練,即使是半路出家的人,也可以很快學會編程並使用深度學習進行建模。主流程式語言操作入門教程,機器學習與深度學習基礎篇包括如何挑選學習書籍、實踐和培訓、數據分析處理編程技術以及反向傳播、循環神經網絡和attention機制、卷積神經網絡模型介紹等內容。應該從以下幾方面學習編程技術,如:線性代數、矩陣相關性和空間秩、一個訓練集的構建過程以及論文數據和最優化目標設置等等。
  • 深度學習算法(第19期)----RNN如何訓練並預測時序信號?
    收錄於話題 #深度學習入門>(num_units=n_neurons, activation=tf.nn.relu)outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)在每一個時刻,我們都有一個size為100的輸出向量,但是實際上,我們需要的是一個輸出值。
  • 【小白學習PyTorch教程】九、基於Pytorch訓練第一個RNN模型
    特別是LSTM被廣泛應用於深度學習模型中。本博客介紹了如何通過PyTorch實現RNN和LSTM,並將其應用於比特幣價格預測。 = RNN(input_size, hidden_size, num_layers, output_size).to(device)rnn
  • 用RNN和TensorFlow創作自己的《哈利波特》小說
    最近我開始學習神經網絡,著迷於深度學習的強大創造力。靈光乍現,我為什麼不把它們融合在一起呢?因此,我使用TensorFlow執行了一個簡單的文本生成模型來創作我自己的《哈利·波特》短篇小說。本文將介紹了我為實現它而編寫的完整代碼。
  • 循環神經網絡(RNN) 基礎淺析
    讓小編自言自語一會關於RNN多麼有用,小編就不需要多嘴了,相信每天刷AI技術群、AI公眾號的看官都知道「雲知聲將LSTM的深度學習技術應用到了雲知聲語音識別
  • TensorFlow練手 | 使用循環神經網絡(RNN)實現影評情感分類
    4.建立深度為2的深度循環神經網絡為了提高模型的擬合能力,使用深度循環神經網絡,我選擇的深度為2。層的dropout保留率rnn_keep = tf.placeholder(tf.float32)# 創建一個模型model = models.Model(x, y, emb_keep, rnn_keep)# 創建數據集對象data = dataset.Dataset
  • 深度學習的學習歷程
    又好像什麼都不懂,學會這些模塊的公式就算會深度學習了嗎?整個深度學習的學習周期是怎樣的,我下一步應該幹啥?這些模塊看起來平平無奇,為什麼組合在一起就能發揮這麼大威力?為什麼drop out能起到正則作用?L1正則和L2正則有什麼區別?cnn、rnn、dnn除了公式不一樣外到底有啥區別?誒,最後一個fc層看起來跟多類別lr分類器好像啊,它們是一回事嗎?
  • 深度學習TensorFlow的55個經典案例
    人工智慧大數據與深度學習  公眾號: weic2c
  • 循環神經網絡(RNN)入門帖:向量到序列,序列到序列,雙向RNN,馬爾科夫化
    作者:David 9地址:http://nooverfit.com/rnn似乎更擅長信息的保存和更新,而cnn似乎更擅長精確的特徵提取;rnn輸入輸出尺寸靈活,而cnn尺寸相對刻板。聊到循環神經網絡RNN,我們第一反應可能是:時間序列 (time sequence)。
  • 學習筆記TF017:自然語言處理、RNN、LSTM
    TensorFlow支持RNN各種變體,tf.nn.rnn_cell。tensor flow.models.rnn中tf.nn.dynamic_rnn實現RNN動力學。接收循環網絡定義,輸入序列批數據。所有序列等長。返回保存每個時間步輸出和隱含狀態兩個張量。從tensor flow.models.rnn導入rnn_cell和rnn。
  • 乾貨:最全面的深度學習自學資源匯總
    深度學習作為機器學習的一個分支,是近年來最熱門同時也是發展最快的人工智慧技術之一,相關學習資源包括免費公開教程和工具都極大豐富,同時這也為學習 深度學習技術 的IT人才帶來選擇上的困擾,Yerevann整理的這個深度學習完全指南
  • 我的開源項目匯總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)
    So far, it supports hot word extracting, text classification, part of speech tagging, named entity recognition, chinese word segment, extracting address, synonym, text clustering, word2vec model, edit
  • 理解神經網絡:從神經元到RNN、CNN、深度學習
    並且形成了很多種類,像CNN(卷積神經網絡),RNN,自編碼,深度學習等等。神經網絡對於數據科學和或者機器學習從業者,就像線性回歸對於統計學家一樣。因此,對神經網絡是什麼有一個基本的理解是有必要的,比如,它是怎麼構成的,它能處理問題的範圍以及它的局限性是什麼。這篇文章嘗試去介紹神經網絡,從一個最基礎的構件,即一個神經元,深入到它的各種流行的種類,像CNN,RNN等。
  • 【NLP保姆級教程】手把手帶你RNN文本分類(附代碼)
    上面的問題引出了本文的重點——「多任務學習(Multi-task learning)」,把多個相關(related)的任務(task)放在一起學習。多個任務之間共享一些因素,它們可以在學習過程中,共享它們所學到的信息,這是單任務學習沒有具備的。相關聯的多任務學習比單任務學習能去的更好的泛化(generalization)效果。
  • 【NLP傻瓜式教程】手把手帶你RNN文本分類(附代碼)
    上面的問題引出了本文的重點——「多任務學習(Multi-task learning)」,把多個相關(related)的任務(task)放在一起學習。多個任務之間共享一些因素,它們可以在學習過程中,共享它們所學到的信息,這是單任務學習沒有具備的。相關聯的多任務學習比單任務學習能去的更好的泛化(generalization)效果。
  • 從深度學習到深度森林方法(Python)
    本文第一節源於周志華教授《關於深度學習的一點思考》, 提出了深度森林是深度學習之外的深度模型的探索。以此展開深度森林的介紹,原理解析並實踐。 周志華教授,畢業於南京大學,歐洲科學院外籍院士,國家傑出青年基金獲得者,現任南京大學人工智慧學院院長、南京大學計算機軟體新技術國家重點實驗室常務副主任、機器學習與數據挖掘研究所 (LAMDA)所長、人工智慧教研室主任。
  • 來自谷歌大腦工程師的RNN系列教程 | RNN的基本介紹(附論文)
    例如,Andrej Karpathy的這篇博文(http://karpathy.github.io/2015/05/21/rnn-effectiveness/)就展示了RNN模型的作用和有效性,它可以訓練莎士比亞的詩集,從而生成類似莎士比亞詩集的文本。在開始本次教程前,需要您對神經網絡(NNs)的基本概念有了一定的了解。