728x90

https://www.youtube.com/watch?v=Z2Vm62QXR_Y 

 

Deep Knowledge Tracing; DKT: 딥러닝을 이용하는 '지식상태'의 추적

- 문제를 풀어감에 따라 학생의 지식 상태의 예측도 변해간다.

- 입력: 문제와 정답여부 & 출력: 예측한 지식 상태

- 모델을 훈련하려면 출력을 라벨링해야 하는데, 학생의 지식상태는 라벨링하기 매우 어려움. 따라서 학생의 예측한 지식 상태 자체를 예측하는 것이 아니라, [대안] 출력한 지식 상태를 기반으로 '다음 문제를 맞출지 여부'를 예측함. (다음 문제의 정답 여부는 이미 라벨링되어 있음)

- 다음 문제가 정답일 경우 이해도 증가 vs 오답일 경우 하락: 다음 문제에 한해서 지식의 이해도를 수정

 

특징

- 데이터가 많아질수록 지식상태 예측은 더욱 정밀해짐

- 데이터가 적을수록 과적합 가능성 높아짐.

 

DKT의 필요성

공부 방향의 제시 (취약한 부분 진단)

가장 효율적인 문제 풀이 순서를 제안해줄 수 있음 (어떻게 하면 취약한 부분을 효율적으로 학습할 수 있는지.)

맞춤형 교육

 

1. 데이터 전처리

interation

문제와 응답을 하나로 묶어서 데이터로 다룰 경우, 이를 DKT에서는 interaction이라고 부른다.

DKT에서 interaction을 encoding하는 일반적인 방법:

문제 종류가 n개, 응답의 종류가 m개이면 원핫인코딩은 모통 nm 크기의 벡터. (틀리면 좌측에서, 맞으면 우측에서 원핫인코딩을 진행함)

 

데이터 증강 (data augmentation)

적은 데이터 개수에 valid set까지 사용하면 개수 더 줄어들게 됨 => 최대 시퀀스 길이를 넘어서 잘린 데이터를 이용하자.

max length가 n이라고 할 때 하나의 시퀀스에서 n만 잘라 쓰는 게 아니라, 시퀀스를 n단위로 자른 조각들 각각을 모두 사용함.

but 

이러한 단순 window 방식은 오히려 오버피팅이 일어날 수 있음 (쪼갠 단위 내에 정답 데이터가 한 개 뿐이면..)

-> 차라리 문제별로 나누는 것이 더 효율적이지 않을까 성찰.

 

 

2. 모델

 

 

=> 출력: 3차원 텐서 형태.

=> 벡터 각각이 문제별 이해도(지식상태)를 나타냄.

 

 

3. 성능 향상에 기여한 것

1. data augmentation & 10 k-fold 평균 앙상블

2. 하이퍼파라미터 튜닝

3. 성능 향상을 위해 가장 중요한 것

3.1. 최대 시퀀스 길이

3.2. 마지막 쿼리로만 하는 loss 계산 + BCE LOSS

- 같은 문제가 연속으로 묶여있음. 길이가 1~1907.

- 같은 문제를 연속으로 푸는데도 그 문제가 맞을지 틀릴지 장담하기 어려움. => 정오답이 나열된 정보만을 가지고 예측, 나아가 동전 던지기 영역에 더 가까워 보임. (특히 데이터가 매우 적기 때문에 모델이 정오답 패턴을 파악하는 것은 어려워 보이)

- "many to one" : 베르누이 모수 개념(베르누이 분포 모수 추정 방식)에 착안해보자. (4개를 맞추고 1개를 틀리면 모수가 0.8이 됨. 정, 오답 여부 결정할 때에도 실제 TEST에서도 해당 모수 0.8에 더 가까운 것을 선택함) (물론 비유적인 표현)

- 모든 정답 여부를 출력하지만 마지막 쿼리만을 사용하여 loss를 계산함. (many to many보다 훨씬 성능 더 좋음)

 

 

* 데이터가 충분할 경우 transformers 기반 모델이 효과적일 수 있지만,

데이터가 적으면 오버피팅 발생하기 쉬우므로 차라리 light한 GRU를 선택.

728x90

+ Recent posts