Deep Knowledge Tracing (深度知識追蹤)


論文:Deep Knowledge Tracing

     Addressing Two Problems in Deep Knowledge Tracing via Prediction-Consistent Regularization

     How Deep is Knowledge Tracing?

 

tensorflow代碼實現:https://github.com/jiangxinyang227/dkt

 

1、概述

  知識追蹤是對學生的知識基於時間建模,以便我們能精確預測學生對於知識點的掌握程度,以及學生在下一次的表現。而且精確的知識追蹤能讓我們抓住學生當前的需求,並進行精准推題。然而人類的學習過程中受到人類自身知識和大腦兩者的復雜的影響的,也導致知識追蹤是非常困難的。

  早期的知識追蹤模型都是依賴於一階馬爾科夫模型,例如貝葉斯知識追蹤(Bayesian Knowledge Tracing)。在本文中引入靈活的循環神經網絡來處理知識追蹤任務。

  知識追蹤任務可以概括為:給定一個學生在某一特定學習任務上的表現的觀測序列  ${x_0, x_1, ......, x_t}$ ,預測他們在下一次的表現 $x_{t+1}$ 。下圖描述了一個學生在學習八年級數學課室的知識追蹤可視化展示。這個學生一開始答對了兩個關於平方根的問題,然后答錯了一道關於X-軸截距的題,接下來做了一系列關於X-軸截距、Y-軸截距和線性方程作圖的題目(在這里平方根、X-軸截距、Y-軸截距等都可以看作是一個知識點)。在學生做完每一道練習時我們都可以預測他在下一道題目上的表現,題目可以是來源於不同知識點的題目。在這個圖中我們只預測了和當前練習題相關的知識點的掌握情況。

    

2、模型

  貝葉斯知識追蹤(BKT)是最流行的知識追蹤模型。在BKT模型中提出了一個關於學生知識狀態的隱變量,學生的知識狀態由一個二元組表示 {掌握該知識點,沒掌握該知識點}。整個模型結構實際上是一個HMM模型,根據狀態轉移矩陣來預測下一個狀態,根據當前的狀態來預測學生的答題結果。而且在BKT模型中認為知識一旦掌握就不會被遺忘。並且在當前的工作中還引入了學生未掌握知識的情況下猜對題目的概率和學生掌握知識的情況下答錯題目的概率,學生的先驗知識和問題的難度來擴展模型。然而不管有沒有這些擴展,BKT模型依然存在幾個問題:

  1)學生的知識狀態用二元組表示並不是很實際。

  2)隱藏狀態和練習做題之間的映射模糊,很難充分預測每個練習的某個概念

  3)觀測狀態的二元組表示會限制題目的類型

  循環神經網絡是一種時間序列的模型,信息是基於早期的信息和當前輸入的信息進行遞歸傳播的。相對於HMM,RNN具有高維,連續的隱藏狀態表示。RNN最大的優勢在於能利用更多的早期的信息,尤其是RNN的變種LSTM網絡結構。RNN在很多時間序列問題上都取得了非常好的結果,因此將RNN應用到知識追蹤上也許會有更好的結果。

  在這里我們可以用傳統的RNN或者是LSTM模型。在將數據輸入到模型之前我們要將輸入的數據轉換成向量表示(輸入的數據就是我們觀測到的學生做題的結果)。輸入值的向量表示有兩種方式:

  1)one-hot表示。假設在我們的模型中的數據中涉及到M個知識點,所有的題目都屬於這M個知識點,每道題的結果有兩種 {對,錯},對於某一道屬於第 $i$ 個知識點,做對時向量表示為第 $M + i$ 個位置為1,其余位置為0;做錯時第 $i$ 個位置為1,其余位置為0,向量總長度為2M(注意整個模型只關注題目所屬知識點,和做題的結果)。one-hot 的表示比較方便,但是一旦知識點的數量非常大之后,向量就會變得高維、稀疏。

  2)通過壓縮感知算法將高維稀疏的輸入數據進行壓縮到低維空間( $\log {2M}$ )中。

  輸出結果 $y_t$ 是一個長度為 M 的向量,向量中的每一個值描述的是對應的知識點的掌握概率(或者說對應的知識點下的題目答對的概率)。因此,整個序列就是根據前 $i-1$ 個時間步的信息來預測 第 $i$ 步對各知識點的掌握情況。

  模型的損失函數為:

    

  在上面$n$是指學生的數量,$T_i$指的是第 $i$個學生的序列長度,$l(.)$是交叉熵損失。

3、DKT的優勢

  很多研究表明DKT模型在各種開源數據集上的表現基本都由於傳統的BKT模型。相關論文表明DKT的優勢主要在於:

  1)近因效應

  在當前時間學生的做題結果是會受到近期學生在這些知識點上的表現的影響的,在BKT模型中假定學生一旦掌握某一知識點,對該知識點就不會遺忘,學生在以后做到屬於該知識點的題目時往往就會表現很好。而實際上並不是這樣的,時間久了,學生也可能會遺忘之前掌握的知識點。而DKT模型能很好的捕捉學生最近的表現來預測學生的做題結果,能更多的利用學生最近的表現。

  2)上下文試驗序列

  學生在做題的過程中,可能是多個知識點的題較叉練習,例如學生在知識點A,B 上的做題順序是 $ A_1 - B_1 - A_2 - B_2 - A_3 - B_3 $ 。BKT只能在單個知識點建模,無法將學生這樣的做題順序給表述出來。而DKT能針對多個知識點建模,能很好的表述這樣的做題順序。

  3)知識點內在相關性

  實際情況中,知識點與知識點之間是具有相關性的,如最上面的圖所示,X-截距、Y-截距和線性方程等之間都是具有很強的相關性的。BKT由於只能對單個知識點建模,因此無法將這些相關性表示出來。而DKT可以對多個知識點建模,且神經網絡可以根據學生的做題結果獲得知識點之間的關系。

  4)個體之間的能力差異

  DKT 能根據該學生在各個知識點上的表現情況來獲得學生的平均能力(該能力能一定程度代表學生的學習能力),而BKT 由於只能在單個知識點上建模,因此無法獲得學生在各知識點上的平均水平。

4、DKT的不足

  DKT當前在學生知識點追蹤上獲得了良好的表現,然而其依然存在一些不足,主要有兩個方面:

  1)模型沒法重構當前的輸入結果

  2)在時間序上學生對知識點的掌握度不是連續一致,而是波動的

  具體的如下圖所示

     

  1)例如當前輸入是 $(s_{32}, 0)$ ,然而在之后的預測結果卻是做題正確。反之亦然,作者認為出現這種情況是因為定義的損失函數沒有考慮時間 $t$ 的輸入值,只考慮了時間 $t$ 的輸出結果和時間 $t+1$ 的輸入值。因此作者引入一個正則項來消除這種現象,正則項的表達式如下:

    

  2)在上圖中中間段,不斷的練習 $s_{32}, s_{33}$ ,發現學生的能力在不斷的波動,而沒有一致性。為了解決這個問題,作者引入了兩個正則項( $L_1$ 和 $L_2$ 正則,相當於彈性網),正則項的表達式如下:

    

  在上面$n$是指學生的數量,$T_i$指的是第 $i$個學生的序列長度。

  最后損失函數如下:

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM