論文筆記 - 從神經圖靈機 NTM 到可微分神經計算機 DNC

Neural Turing Machine(NTC) 和 Differentiable Neural Machine(DNC) 的相關筆記。

涉及論文:

  • Neural Turing Machine

    Neural Turing Machine(2014)
  • Differentiable Neural Machine

    Hybrid computing using a neural network with dynamic external memory (2016)

Introduction

當今所有的計算機體系都源自馮諾依曼體系(Von Neumann, 1945),三大要素:

  1. elementary operations

    基本操作,如加減乘除
  2. logical flow control (branching)

    邏輯流程式控制制,如 if-else-then, for, while
  3. external memory

    外部存儲器,內存和硬碟

RNN 被認為是 Turing-complete 的,理論上可以擬合任何函數,有模擬流程的能力,然而理論上可以,實際實現並沒有那麼簡單。NTM/DNC 的重點是 存儲管理,它能夠通過一個大的、可定址的外部存儲器來擴展標準 RNN 能力,大大簡化算數等任務。

Turing Machine

NTM/DNC 的靈感來自於圖靈機。圖靈機就是一種簡單的計算機模型,摘一段概念:

A Turing machine is a simple model of the computer. Like modern computers, it encapsulates the idea of having an external memory as well as some sort of processor. Essentially, a Turing machine consists of a tape with instructions written on it and the device that can read up and down the tape. Based on what it reads on the tape, it can decide to move in a different direction to write a new symbol or erase a symbol, and so on.

很簡單,由 外部存儲器(寫有指令的磁帶)和存儲器(能夠沿著磁帶讀取的設備) 組成,根據磁帶上讀取到的指令,計算機能夠決定在磁帶上不同的方向上移動來進行寫入或者擦除新符號等操作。

神經圖靈機的靈感就來自圖靈機的架構,也有 控制器(神經網路)和外部存儲器(memory) 構成,試圖去解決一些計算機能夠解決的很好但機器學習模型很難解決的問題,比如說演算法,或者說上面提到的馮諾依曼體系的一些要素。

NTM/DNC vs. TM

NTM/DNC 靈感來自於 TM,最關鍵的區別是神經圖靈機是 可微分的(differentiable) 圖靈機。計算機/圖靈機的計算是絕對的,要麼是 0 要麼是 1,計算機在非此即彼的邏輯或者整數中運作。然而大多數的神經網路和機器學習更多會使用實數,使用更平滑的曲線,這樣會更容易訓練(如 BP,可以通過輸出追蹤回去調整參數以得到希望的輸出)。神經圖靈機採用基本的圖靈機思想,但同時找到了平滑的模擬函數,也就是說,在圖靈機磁帶上,神經圖靈機 NTM 可以決定「稍微」向左或者向右移動,而不是單純的向左跳一個或者向右跳一個。

Application

  • Learn simple algorithms(Copy, repeat, recognize simple formal languages)

    能夠學習簡單的演算法(誇張一點,本質上就是嘗試著取代程序員)

    NTM/DNC 能夠接受輸入和輸出,並且學習得到能夠從輸入映射到輸出的演算法

    如說複製任務,它能夠學會接受相對短的序列,並重複幾次。這讓 LSTM 來做它就會崩潰,因為 LSTM 並不是在學習演算法,而是試圖一次性解決一個整體問題,它意識不到前兩次所做的事情就是它們之後應該做的

    再比如說識別平衡的括弧,這涉及到了棧(stack)的演算法,NTM/DNC 可以像程序員一樣完成這個任務
  • Generalize

    NTM/DNC 的計算圖是對所有任務通用的
  • Do well at language modeling

    擅長語言建模

    比如做完型填空,能夠猜測一個單詞在句子或者文檔語境中的意思
  • Do well at bAbI

    擅長推理

    在 bAbI 數據集上效果很好

Problems

  1. Architecture dependent

    實現的時候需要謹慎做出如對每一時刻的輸入能讀取/寫入多少向量這類的決策,否則很有可能永遠都得不到一個合理的結果
  2. Large number of parameters

    參數量非常大 => RAM 壓力很大
  3. Dosen』t benefit much from GPU acceleration

    序列輸入,每一步輸入都依賴之前的輸入,也就很難並行化,不能受益於 GPU 加速 => 很難訓練

很難訓練還表現在:

  1. Numerical Instability

    數值不穩定性。在試圖學習演算法時會更傾向於犯大錯誤,而如果在演算法中犯了一個錯誤,所有的輸出結果都會是不正確的。換言之,訓練時神經圖靈機總是很難找到需要的演算法
  2. Using memory is hard

    大量數據+足夠時間,大多數神經網路都會得到一些結果,而神經圖靈機經常會卡住,它們經常一遍又一遍地一味地產生那些經常重複的值

    因為使用記憶是很困難的,不僅要學會記住之後解決問題需要的東西,還不能意外的忘記它
  3. Need smart optimization

    1+2 => 需要很好的優化

    gradient clipping, loss clipping, RMSprop, Adam, try different initialization, curriculum learning…

上面這些問題會讓神經圖靈機很難在實際中應用。

NTM/DNC vs. MemNN

異:

DNC 側重記憶管理。MemNN 側重 memory 查詢,在記憶管理上非常簡單,一般以 QA 為例,就是每句話 encode 成 vector,然後保存下來,所謂的更新大多是把不重要的 memory 清出去空個位出來給新的 memory。而 DNC 花更多努力在記憶管理上,注重更新 memory 和 memory 的時間關係,包含更多的操作,更新、刪除、添加等。

另外,NTM/DNC 側重演算法任務,能夠自動從數據中學習演算法,而一般而言 MemNN 側重的是 QA 任務。

同:

都是從 model architecture 層面,將多個 machine learning model 聯合起來處理複雜的任務,比如 LSTM 通常是來處理線性數據,MemNN/NTM 可能包含多個 LSTM,能夠處理多個線性結構(類似圖結構)

Neural Turing Machines(NTM)

Basic Idea

主要創新是將神經網路與外部存儲器(external memory)結合來擴展神經網路的能力(通過注意力機制進行交互),可以類比圖靈機,不過 NTM 是端到端可微的,所以可以使用梯度下降進行高效訓練。

兩個 主要元件controllermemory bank。類比計算機來看 基本思路,實際是把神經網路看成是 CPU,把 memory 看做是計算機內存。CPU 根據任務來確定到內存的哪個位置讀寫信息,不過計算機的內存位置是離散數據,而 NTM 里是連續可導的。

Architecture

一張圖讀懂架構,取 DeepMind DNC Slides 做了部分修改。最重要的概念還是那句話,每個組件都是可微分的,所有操作皆可導,這就可以直接用梯度下降訓練來訓練。

主要來研究讀寫操作。

Read Heads

讀操作和普通的 MemNN 相似,使用 attention 原理計算每個 memory vector 的權重向量,然後對 memory vector 進行加權生成讀操作的結果。

r_t leftarrow sum^N_{i=1} w_t(i)M_t(i)

M_t 是一個 NxM 的矩陣,表示 t 時刻的 memory,N 是 memory 的數量,M 是 memory vector 的維度。w_t是 t 時刻產生的權重向量,和 memory 數量相同,進行了歸一化,sum_iw_t(i)=1,   0 le w_t(i) le 1, forall i

Write Heads

Erase and Add

寫操作包含兩個步驟:先擦除(erase)添加(add)

  • Erase

    input + controller 產生 erase vector e_t in R^M, e_t(d) in (0,1)

    input + memory 產生 M_t^{erased}(i) leftarrow M_{t-1}(i)[1-w_t(i)e_t]

    和讀操作一樣,需要由 attention 機製得到 weight vector,表示每個 memory vector 被改動的幅度的大小,有多少個 memory 就有多少個 w_t

    將上一時刻每個 memory vector 都乘上一個 0-1 之間的 vector,就是擦除操作,相當於 forget gate

    如果 w_te_t 都為 1,memory 就會被重置為 0,如果兩者有一個為 0,那麼 memory 保持不變。多個 erase 操作可以以任意順序疊加
  • Add

    input + controller 產生 add vector a_t in R^Ma_t(d) in (0,1)

    input + memory 產生 M_t(i) leftarrow M_t^{erased}(i) + w_t(i)a_t

    相當於 update gate

    同樣的,多個 add 操作的順序並沒有關係

所有的 memory vector 共享 e_t,  a_t,erase 和 add 操作中的 w_t 也是共享的。再次注意 erase vector 和 add vector 都是由 controller 對 input 做編碼得到的。

擦除和添加動作都有 M 個獨立的 component,使得對每個 memory location 的修改可以在更細的粒度上進行。

Addressing

知道了怎麼讀寫,現在來看看權重是如何產生的。主要通過兩種方式來進行定址,一是 content-based addressing,基於 controller 提供的狀態向量 key vector 和當前 memory vector 的相似度來決定對內存地址的聚焦程度,另一個是 location-based addressing,通過地址來定址,可能還會伴隨權重的位移(rotational shift)。

整個 Addressing 過程的流程圖:

Content-based addressing

Controller 會產生一個長度為 M 的狀態向量 key vector k_t,基於每一個 memory vector M_t(i) 和 controller 狀態向量 k_t 的相似程度 K[·,·],計算每個 memory vector 的 attention 權重。其中相似度可以用 cosine similarity 計算,K(u,v)={u v over ||u|| ||v||}

使用 softmax 將相似度轉化為概率分布:

w^c_t(i) leftarrow {exp(eta_tK[k_t, M_t(i)]) over sum_j exp(eta_tK[k_t, M_t(j)])}

其中,eta_t 可以放大或減弱聚焦的程度。eta_t=1 時就是標準的 softmax,而 eta 的值越大,越會強化最大相似度分數的 memory vector 的優勢,可以看做贏者通吃。要注意的是 eta 不是超參數,而是 controller 預測得到的。舉個具體的例子,在對話領域,如果輸入時「呵呵」這類沒有太多信息量的句子,那麼 controller 就會產生一個非常接近 0 的 eta,表示沒有明確傾向去訪問某個特定的信息;反之,如果是包含很多信息的輸入,產生的 eta 值會很大。

content addressing 完成的下面一個流程,k_t 可以看做是 controller 對輸入進行編碼產生的狀態向量,eta_t 是標量,一個 concentration 參數。

Location-based addressing

不是所有的問題都可以通過 content-based addressing 來解決的。在一些特定任務尤其是有 variable-binding 的任務中,變數的內容是任意的,但變數還是需要一個可識別的名字/地址來 refer。比如說算數任務,x, y 代表任意值,要計算 f(x,y)=x * y,這時候 controller 就會把 x,y 存到對應的地址上,然後通過地址而不是數值內容來獲取它們並進行乘法操作。

Content-based addressing 比 location-based addressing 更為通用,因為 Content-based addressing 本身可能包含地址信息。然而 location-based addressing 對某些形式的通用化很有必要,所以論文同時引入了兩種定址機制。

1. Interpolation Gate

第一步要進行插值計算。

w_t^g leftarrow g_tw^c_t + (1-g_t)w_{t-1}

基於內容的 weight vector w^c_t 和上一個時間的 weight vector w_{t-1} 的線性組合,線性組合的參數 g_t 是一個 (0, 1)之間的標量,由 controller 產生,表示多大程度上使用當前時刻基於內容的定址,多大程度上使用上一時刻產生的 w_{t-1}

如果 g=0,那麼 content-weighting 整個就被忽略了,只用上一時刻的權重;如果 g=1,那麼上一時刻的權重就被忽略了,只使用 content-based addressing。

2. Shifting and Sharpening

基於地址的定址機制既可以用做簡單的 memory bank 遍歷,也可以用於隨機訪問,通過對 weighting 的旋轉位移操作來實現。如果當前 weight 全力聚焦在一個單一地址上,那麼一個為 1 的旋轉可以把部分焦點位移到下一個地址,一個負的位移則相反。

具體是在 Interpolation 之後進行。controller 產生的 shift weighting s_t 定義了所有允許的整數位移值上的歸一化分布。如果 -1 到 1 間的位移是被允許的,那麼 s_t 就有三個對應位移值 -1,0,1 上的概率分布。最簡單是用 softmax 來預測 shift weighting,不過這裡用了另一種方法,controller 產生一個 single scalar 表示均勻分布的下界(the lower bound of a width one uniform distribution over shifts),也就是如果 shift scalar=6.7,那麼 s_t(6)=0.3s_t(7)=0.7,剩下的 s_t(i) 都是 0。

Shift attention: hat w_t leftarrow sum^{R-1}_{j=0}w^g_t(j)s_t(i-j) s_t 其實相當於一個 convolution filter,每一個元素表示當前位置和對應位置的相關程度,像是定義了一個滑動窗里的權重,shift attention 將滑動窗里的 vector 做加權平均。

如果位移權重不是 sharp 的,也就是說權重分布相對均勻,那麼這個卷積操作會使權重隨時間變化更加發散。例如,如果給 -1,0,1 的對應的權重 0.1,0.8 和 0.1,旋轉位移就會將聚焦在一個點上的權重輕微分散到三個點上。

controller 還會給出一個標量 gamma_t 用來 sharpen 最終的權重,作用和之前講過的 eta_t 差不多,值越大權重大的越突出。

Sharpening: w_t(i) leftarrow {hat w_t(i)gamma_t over sum_j hat w_t(i)gamma_t}

結合權重插值(weighting interpolation)內容定址(content-based addressing)地址定址(location-based addressing)的定址系統可以在三種補充模式下工作:

  1. 權重可以完全由 content-based addressing 來自主選擇而不受 location system 的影響
  2. 由 content-based addressing 產生的權重可以被選擇然後進行位移。這使得 focus 能夠跳躍到通過內容定址產生的地址附近而不是具體一個點。在計算方面,這使得 head 可以訪問一個連續的數據塊,然後訪問這個塊中的特定數據
  3. 來自上一個時刻的權重可以在沒有任何 content-based addressing 的輸入的情況下被旋轉,以便權重可以以相同的時間間隔連續地訪問一個地址序列(allows the weighting to iterate through a sequence of addresses by advancing the same distance at each time-step)。

Summary

input 被 controller 加工產生 key vector 和一些中間變數,基於 key vector 和 memory bank 里的記憶向量的相似程度,用 attention 機制將 memory 檢索結果轉化成 vector 返回給讀操作;基於 controller 加工後的外界輸入,把一些信息寫到 memory 裡面,實現更新 memory 的效果(擦除+更新,都需要 weight vector 來確定 memory vector 的權重,權重由 content-base+location-base 產生,表示輸入與記憶的相似程度,記憶與記憶的相似程度)。

NTM 架構有三個 free parameters:

  • size of memory
  • number of read and write heads
  • range of allowed location shifts

但最重要的選擇還是用作 controller 的網路模型。來探討下 recurrent 和 feedforward network 的選擇

  • 遞歸網路像 LSTM 擁有自己的 internal memory,可以對矩陣中更大的存儲器起到補充作用。想像 controller 是 CPU,memory 是 RAM,那麼 RN 里的 hidden activations 相當於處理器的寄存器(rigisters),允許 controller 跨時間操作時可以共享信息
  • 前饋網路 FN 可以通過每一時刻讀寫同一個記憶地址來模擬 RN,在網路操作上有更大透明度,讀寫 memory matrix 的模式比 RNN 的中間狀態更容易解釋。但局限是並行 read/write heads 的數量有限,在 NTM 計算時會成為瓶頸。單個 read head 在每個時刻只能對單個 memory vector 進行一元變換,而兩個 read heads 可以進行二元向量變換,以此類推。遞歸控制器能夠存儲上一時刻的讀出的向量,不會受到這個限制。

Differentiable Neural Computer(DNC)

NTM 的第二個版本。更加複雜一些吧。

和 NTM 一樣,controller 由若干個神經網路組成,負責和輸入、輸出交互,產生一些中間變數(又叫 interface parameter)。根據這些中間變數,可以進行 memory 的讀寫操作,注意這裡是 先寫再讀! 綠色的方塊表示寫操作,可以看到先是會釋放某些區域的記憶,然後分配記憶,寫入東西,完成後輸出,表示 done,可以重新分配記憶了,然後交替,整個是動態分配的過程。

紫色的方塊表示讀操作,更新完 memory,會從更新過的 memory 里定位和讀取信息。有多個互相獨立的 read model,互相獨立的來從 memory 里讀取信息並拼到一起,可以從各個角度來衡量信息的有用程度。

記憶區的右邊(d Memory usage and temporal links)有一個附加的鏈表,追蹤上面的箭頭能夠「回想」最近輸入和輸出的過程。

和 Seq2seq 類比一下,圖中 controller 指向自己的箭頭其實相當於 RNN decoder里的 RNN state vector,黃線從 memory 到 controller 的路徑其實相當於 attention 提取的 context vector。

Architecture

梳理一下,有三大部分:

  1. Controller 產生 interface parameters 和 output parameters x_t=[x_t;r^1_{t-1};…;r^R_{t-1}] (xi t, v_t)=NNC([x_1;…;x_t];	heta)
  2. 對 memory 的操作,先寫再讀

    Content-based writing and reading weight

    History-based writing weight => final writing weights

    History-based reading weight => final reading weights
  3. Memory 結果(類比對話系統里的上下文 context vector)和 controller 產生的 v_t(類比RNN decoder 的 state vector)拼到一起產生最後的輸出 y_t=W_r[r^1_t,…r^R_t]+v_t

完整的連續輸入的結構圖如下,上一時刻讀的信息也會作為輸入放到 controller 里做預測,也就是說除了 input,controller 還會用到歷史信息。

Details

下面說一下 memory 讀寫操作的細節。沿著下圖走一遍,圖中六角形部分都是控制器的輸出也就是 interface parameter

1. Content-based weighting for memory write

這一部分 c^w_t 和 NMT.v1 相同。D 是相似度函數,可以取 cosine similarity; eta 是 concentration parameter,表示 key strength,是大於 1 的 scalar

C(M_{t-1}, k^w_t, eta^w_t)[i]={exp(D(k^w_t, M_{t-1}[i, ·])eta_t^w over sum_j exp(D(k^w_t, M_{t-1}[j,·])eta^w_t))}

2. History-based write weighting(Dynamic memory allocation)

對應 NTM 的 remove 和 add 操作。每一個存儲單元都是一個等長 vector,裡面有若干個 element,只要 element 沒有全部被佔用,就可以寫入新數據。如果被完全佔用了,也可以通過一定方法將存儲單元釋放。

Controller 有三種選擇:

  1. 不寫
  2. 寫 & 寫到新分配的位置(未使用過的/最新釋放的存儲單元)
  3. 寫 & 寫到內容相似且還沒有被完全佔用的存儲單元

    也就是更新這個存儲單元的信息

如果所有存儲空間都用完了,那麼控制器必須釋放空間才可以進行寫操作。每一個時刻的寫操作完成後,位置信息會和 L 矩陣也就是 links of association 連接起來,記錄信息存儲的順序。

  • memory retention vector: psi_t = prod^R_{i=1}(1-f^i_t omega^{r,i}_{t-1}) omega^{w,i}_{t-1} 是上一時刻的 write weights,f^i_t 是 controller 產生的 free gates,決定最近讀取的位置要不要被釋放。i 是 read head 的 index。psi_t in [0,1] 也就是 memory retention vector,表示每個位置上有多少信息被保留下來
  • usage vector: u_t=(u_{t-1}+omega^w_{t-1}-(u_{t-1}⊙omega_{t-1}^w))⊙ psi_t u_t 是 t 時刻的 usage vector,衡量每一個 memory vector 最近被用到的程度,如果很久沒用&需要騰地方,就會優先把它給踢掉

    u_tpsi_t 限制,在 0-1 之間,⊙ 表示 element-wise 乘法
  • least used location: phi_t=SortIndicesAscending(u_t)

    升序排序,於是 phi_t[1] 表示最少使用到的位置
  • allocation weighting: a_t[phi_t[j]]=(1-u_t[phi_t[j]])prod^{j-1}_{i=1}u_t[phi_t[j]]

    最近讀取的 memory 在更新 memory 的時候有更大的權重

    a_t 是 allocation weighting,提供寫操作的新的位置,如果所有的 u 都是 1,那麼 a_t=0,必須先釋放存儲空間才能夠分配空間

3. Final write weight

Usage attention 和 content attention 通過 gate 線性組合, gate 也是 interface parameter, 再做後續 filter。

  • omega^w_t=g^w_t[g^a_ta_t+(1-g^a_t)c^w_t] g^a_t 是線性組合的 allocation gate,g^w_t是 write gate,如果 write gate 是 0,那麼啥都不寫
  • M_t=M_{t-1}⊙(E-omega^w_te^T_t)+omega^w_tv^T_t = M_{t-1}-M_{t-1}⊙omega^w_te^T_t+omega^w_tv^T_t

    Memory writes,改變 t-1 時刻的 memory bank

4. Content-based weighting for memory read

C(M_t, k^{r,i}_t,eta^{r,i}_t)[k]={exp(D(k^{r,i}_t, M_t[k, ·])eta^{r,i}_t) over sum_j exp(D(k^{r,i}_t,M_t[j, ·])eta^{r,i}_t)}

總共讀 R 次(Rge 1,超參數),從更新過以後的 memory M_t 里讀信息

5. History-based reading weights

通過有時間信息的歷史記錄(temporal links),和 content-based read 挑出來的 C,進一步挑選出不直接相關但歷史上有間接聯繫的 memory vector。舉個例子理解一下,t 時刻的 input 通過內容的相似程度定位到了第 5 個 memory vector,然後 L 矩陣通過寫操作的歷史記錄,發現第 5 個 vector 和第 2,4,6 個 vector 非常相關,所以儘管 t 時刻的 input 和 vector 2,4,6 在這一時刻表面上不相關,但有了第 5 個 vector 作為中介找到了 2,4,6,就有了間接關係,這可以通過 f, b 挑選出來。

p_0=0 p_t=(1-sum^N_{i=1}omega^w_t[i])p_{t-1}+omega^w_t

L_0[i,j]=0   forall i,j

L_t[i,i]=0   forall i L_t[i,j]=(1-omega^w_t[i]-omega^w_t[j])L_{t-1}[i,j]+omega^w_t[i]p^w_{t-1}[j]

L_t[i,j]: the degree to which location i was the location written to after location j,the rows and columns of Lt represent the weights of the temporal links going into and out from particular memory slots, respectively

每次修改存儲空間時,鏈接矩陣都會更新,刪除舊位置的鏈接,添加最後寫入的位置的新鏈接。

從 L 中挑選:

  • b^i_t backward weighting

    b^i_t=L^T_tomega^{r,i}_{t-1}
  • f^i_t forward weighting

    f^i_t=L_tomega^{r,i}_{t-1}

這種 temporal links 特別適用於NLP的任務。比如一段文本以單詞為單位輸入餵給 DNC,每個單詞輸入下 memory 都會被更新,但根據 L 可以知道上一個單詞都影響了哪些 memory,也就是能夠去關注單詞的時序關係,這對捕捉文本意義有重要作用。

6. Final read weighting

  • omega^{r,i}_t=pi^i_t[1]b^i_t+pi^i_t[2]c^{r,i}_t+pi^i_t[3]f^i_t pi^i_t 表示讀的模式,如果 pi^i_t[2] 佔主導,那麼只用 content lookup,如果 pi^i_t[3] 佔主導,那麼就按 memory 寫入的順序來遍歷,如果 pi^i_t[1] 佔主導,按 memory 寫入順序反向遍歷
  • r^i_t=M^T_tomega^{r,i}_t

    Read from memory,三個 weight vector 加權相加得到最後的 weight vector,然後從更新過的 memory vector 把 memory 讀出來加權平均返回給控制器

小結一下,對於讀操作,控制器可以從多個位置讀取記憶,可以基於內容讀取,也可以基於 associative temporal links 讀取(向前/向後以順序或反序的方式回調依次讀取寫入的信息)。讀取的信息可以用來生成問題答案或者在環境中採取的行為。

Others

controller 可以用簡單的 RNN,複雜些的 LSTM,也可以用 RL。論文還舉了一些 DNC 的應用例子,比如學會找最短路徑、倫敦地鐵的路徑規劃、家族樹(回答 who is Freya』s maternal great uncle 這類問題)、移動塊問題等。

DNC vs. NTM

DNC 是 NTM 的第二版,它改進了 NTM 的定址機制,去掉了 index shift,更好支持了對記憶的 allocate 和 de-allocate 的功能。具體來說表現在下面幾個方面:

  1. No index shift based addressing

    NTM 是沿著磁帶(或者說記憶)左右移動,而 DNC 則嘗試基於輸入直接在記憶中搜索給定的 vector
  2. Can 『allocate』 and 『deallocate』 memory

    DNC 可以分配和釋放記憶。NTM 不能保證多個存儲單元之間互不重疊、互不干擾(=> allocate a free space),也不能釋放存儲單元,這意味著不能重複使用存儲單元,也就很難處理很長的序列(=> free gates used for deallocation)

    另外,這種機制也很容易能將記憶中的某個區域標記為禁止訪問,避免在以後意外地刪除它們,這有助於優化
  3. Remembers recent memory use

    NTM 中,序列信息只能通過連續位置的寫操作來順序保存,並回到 memory 起點將它們讀出來。一旦寫操作跳躍到一個很遠的位置,那麼跳躍前和跳躍後的存儲順序就丟失了,讀操作是沒辦法獲取的

    而 DNC 有一個 temporal link matrix 記錄了寫操作的順序,也就是說 DNC 有某種形式的 temporal memory,在某個瞬時記憶下 DNC 可以回想起上一步做的事,以及上一步的上一步,以此類推,也就是可以遍歷由它們需要做的事組成地一個鏈表

參考鏈接

DeepMind DNC Slides Neural

Turing Machines: Perils and Promise

博客: shuang0420.com

公眾號: xu_a_heng

歡迎關注公眾號:徐阿衡


推薦閱讀:

DeepPath 閱讀筆記
我為什麼從技術角度不看好中國的智能音箱
tf.nn.nce_loss 來自一篇古老的文章
Joint Extraction of Entities and RelationsBased on a Novel Tagging Scheme
Learning to Skim Text 閱讀筆記

TAG:自然語言處理 | 深度學習DeepLearning | bot聊天機器人 |