728x90

https://wikidocs.net/26271

https://www.quora.com/What-is-RBF-kernel-in-SVM

 

 

Kernels in SVM classification: function that is responsible for defining the decision boundaries between the classes

-- classic linear kernel which assumes that the different classes are separated by a straight line
-- RBF (radial basis function) kernel is used when the boundaries are hypothesized to be curve-shaped

   => SVM classification에서 자주 사용됨


"SVM(서포트 벡터 머신) 모델"

에서도 커널을 사용하는데, 주로 rbf kernel을 사용한다.

 

(1) 데이터를 linear하게 분리

(2) 비선형의 경우 dimension을 늘려 linear로 분리

 

(1) linear classification(선형 분류): 데이터(서포트 벡터)로부터 여백(margin)이 최대선/면을 찾아 분류

*서포트 벡터: 선으로부터 가장 가까이 있는 데이터

*2차원에서는 선, 3차원에서는 면

 

 

(2) 비선형 분류

선형분류가 되지 않는 데이터라도, 상위 dimension으로 가면, 선형 분류 가능

-다항식 SVM (kernel='poly' 옵션)

-RBF SVM(kernel='rbf' 옵션)

 

    *커널 함수 (매핑 함수)
     : 새로운 특성 만들어 데이터를 상위 차원 공간으로 옮겨주는 함수

    *커널 트릭: 실제로 특성을 추가하지 않고도 특성을 추가한 것과 같은 효과를 내는 방법

 

(2)-2 커널함수의 종류

1. SVC

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

 

2. RBF SVM

model = SVC() #model = SVC(kernel='rbf')

 

3. 선형 SVM

model = SVC(kernel='linear')

 

4. 다항식 SVM

model = SVC(kernel='poly')

 

 

(2)-3 중요 하이퍼파라미터

728x90
728x90

원본 출처:

(1) UoMDSS workshop

https://github.com/UOMDSS/workshops-2022-2023

 

(2) 이미지 이하 내용은 아래 글을 필요한 부분만 추출하여 정리한 것

https://blog.naver.com/PostView.naver?blogId=ycpiglet&logNo=222139077774&redirect=Dlog&widgetTypeCall=true&topReferer=https%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fwhere%3Dnexearch%26sm%3Dtop_hty%26fbm%3D0%26ie%3Dutf8%26query%3Dkalman%2Bfilter&directAccess=false


 

자율주행에는, map이 필요함

센서와 데이터를 통한 맵핑(Mapping)이 필요 → 이때 필요한 작업이 바로 '확률 기반의' Localization.

*Localization: 위치 측정

*일종의 추정이론 (Estimation Theory)에 포함되는 것: 입력된 자료가 불완전하거나 불확실하더라도 사용할 수 있는 계산 결과의 근삿값 이용함. 즉, 통계적 방법과 인과관계를 기반으로 예측하는 것. 

 

자율주행차의 Localization의 경우, 필요한 데이터의 전수조사를 할 수 없기에 추정(Estimation) 기법을 동원해야 함.

모든 관측값(Measurement)는 오차(Error)를 가지고 있으며, 기술 통해 줄일 수는 있지만 완전히 없애는 건 불가능함

 

이때 칼만 필터(Kalman Filter)를 활용할 수 있다: current state를 계산할 때 control input으로 사용되는 것

- 적용 대상: GPS, 날씨 예측, 주식 예측 등.

- 칼만 필터의 기본 개념: 과거와 현재의 값을 기준으로 재귀적 연산을 통하여 최적값을 추적하는 것 (상태 관측기의 최적버전)

* 필터: measured data에 포함된 noise를 필터링하는 것 → noise가 포함된 data에서 원하는 신호나 정보를 골라내는 알고리즘

                                                                                      current state를 estimate하는 데 필요함.

- 칼만 필터는 최소제곱법(LSM)을 사용함

- 확률에 기반한 estimation이므로, 예측의 대상은 정규 분포(가우시안 분포)를 가지는 대상.

 

- 적용 상황의 2가지 조건 (1) 모션 모델과 측정 모델이 Linear (2) 정규 분포(가우시안 분포)를 따름

   물체의 measurement에 가우시안분포의 확률적 오차가 포함되고, 특정 시점의 상태가 이전 시점 상태와 선형적 관계를 가진 경우에만 적용이 가능함. 잇따른 한계 존재함.

  예측 model을 이용하여, 자율주행차의 실제 속도와 위치가 어떤 범위에 속할 것이라는 예측(Prediction)이 가능함: 칼만필터는 위치(position)와 속도(velocity) 두 변수를 랜덤 가우시안 분포로 가정함. (estimation != prediction)

 

- 칼만필터의 동작 원리:

   다음 위치를 확률적으로 predict하고,

   실제로 measure한 값을 통해 prediction과 얼마나 비슷한지 확인 후

   보정과 estimate을 한다

    => 재귀적 반복

 

- 칼만필터의 효율성: 일반적인 알고리즘은 기존 데이터를 보유해야 하므로 메모리 부담이 큼. 그러나 칼만필터는 직전 estimation과 현재에 대한 prediction만 저장하고 있으면 되는, 즉 직전값을 제외한 기존의 오래된 데이터는 버려도 되는 '재귀필터'!!

- 칼만필터의 한계: 시스템이 Linear이라는 가정 비선형 시스템에서 error가 커지거나 발산할 수 있음

                             noise가 가우시안 분포를 따른다는 가정 역시 어긋나는 경우가 많음.

 

- 보완책: 확장 칼만 필터(EKF, Extended Kalman Filter): most popular

              무향 칼만 필터(UKF, Unscented Kalman Filter)

              두 가지 모두 적용해보고 성능 비교하여 적용한다고 함.

              파티클 필터(Particle Filter): 추정 확률 분포를 가우시안으로 특정짓지 않는 필터 but 연산량이 많음

 

 

 

 

 

 

 

[수학] 칼만 필터(Kalman Filter)란 무엇인가? (로봇, 자율주행, SLAM 알고리즘)

자율주행(Autonomous Driving)에는 기계(Mobility)가 이동을 하면서 스스로 장애물을 파악해서 피하고, ...

blog.naver.com

 

 

 

 

 

728x90
728x90

1. 주어진 날짜 데이터의 범위 확인

set(data['base_date'].unique())
#21년 9월 1일부터 ~ 22년 8월 31일까지

2. 날짜 데이터의 형태 확인

data['base_data']

# 0         20220623
# 1         20220728
# 2         20211010
# 3         20220311
# 4         20211005
#             ...   
# 291236    20220827
# 291237    20220819
# 291238    20220805
# 291239    20220812
# 291240    20220812
# Name: base_date, Length: 4992458, dtype: int64

=> 년, 월, 일이 분리되지 않은 int64 데이터타입

=> pandas의 to_datetime 함수: 시계열/날짜 데이터 전처리에서 주로 사용되는 함수

     해당 함수는 문자열만을 다루므로, 주어진 날짜 데이터를 문자열로 바꾼 후 to_datetime 함수 적용.

 

3. lamda 활용하여 pandas의 to_datetime 함수 적용

data['basedate_datetime'] = data['base_date'].apply(lambda x: pd.to_datetime(str(x), format='%Y-%m-%d'))
#결과물 확인
data['basedate_datetime'].head 

# bound method NDFrame.head of 0        2022-06-23
# 1        2022-07-28
# 2        2021-10-10
#             ...    
# Name: basedate_datetime, Length: 4992458, dtype: datetime64[ns]> #datetime 형태로 변환됨을 확인

4. 년도, 월, 일, 요일 정보 추출하여 별도의 columns 생성

data['basedate_y'] = data['basedate_datetime'].dt.strftime('%Y') #년
data['basedate_m'] = data['basedate_datetime'].dt.strftime('%m') #월
data['basedate_md'] = data['basedate_datetime'].dt.strftime('%m-%d') #월-일
data['basedate_day'] = data['basedate_datetime'].dt.day_name() #요일
  • 년, 월, 일 : dt.strftime 함수 사용
  • 요일: dt.day_name 함수 사용
  • %Y, %, %m-%d와 같은 코드 활용

출처: https://ivo-lee.tistory.com/90

 

5. 결과물 예시

 

 

 

참고 출처: https://bigdaheta.tistory.com/16, https://acdongpgm.tistory.com/195

728x90
728x90
글 목록
#1 불균형한 데이터 분포 전처리하기
#2 (Random Forest) train-test 분할 및 간단한 모델 학습
#3 Validation 데이터 분할, K-fold 교차검증

1. Validation 데이터 분할

  • 사이킷런의 model_selection의 train_test_split을 활용
    (여기서 'test'이라는 표현에 혼동이 있을 수 있으나 'validation'의 의미로 생각하면 됨)
  • stratify
  • 기존에 train과 test로만 분리된 데이터를 => train, val, test의 세 가지로 나눔
    (train에서 일정 비율을 떼어내 val 데이터로 만듦)
train_x train_y
val_x val_y
test_x test_y

from sklearn.model_selection import train_test_split

X_train, X_val, Y_train, Y_val = train_test_split(train_x, train_y, 
                                                  stratify = train_y, 
                                                  test_size = 0.25, 
                                                  random_state = 10086) 
#'stratify = train_y': train_y에 존재하는 요소의 비율을 고려하여, 검증셋과 훈련셋을 분할함
# 직접 데이터명 지정하여 따로 저장함

아까 방법 그대로. clf 분류기를 학습시켜보자!
이후, (최종 test 데이터에 대한 예측 전), valid 데이터에 대한 예측을 우선적으로 진행해보자.

clf = RandomForestClassifier()
clf.fit(X_train, Y_train)
Y_proba = clf.predict_proba(X_val) #학습한 분류기의 예측 결과

val 데이터에 대한 모델의 예측 점수(성능)을 계산해보자.

  • 사이킷런의 함수 통해 점수 반환하려면, Y_val을 원핫인코딩 형태로 변환해야 함.
    pandas의 get.dummies()
  • val에 대한 점수 반환해보기
    사이킷런의 metrics의 log_loss 함수 이용
    log_loss(정답, 예측값)
Y_val_onehot = pd.get_dummies(Y_val) #실제 정답지의 원핫인코딩 버전

from sklearn.metrics import log_loss #val에 대한 logloss 점수 반환
log_loss(Y_val_onehot, Y_proba)

2. K-fold 교차검증

2.1 Fold 생성

상대적으로 데이터량이 충분하지 않은 경우, 머신러닝에서는 나에게 주어진 데이터를 얼마나 효율적이고 효과적으로 사용해내느냐가 중요하다. 이때 활용할 수 있는 것이 'K-fold 교차검증'이다.

  • 과적합 방지 위한 툴
  • 데이터를 k개의 폴드로 쪼개어 하나씩 돌아가며 valid data를 수행함 => k개 경우의 성능 평균을 산출
  • 사이킷런의 model_selection에서 (Stratified)KFold 사용
    StratifiedKFold(n_splites = n, shuffle = True, randome_state = n)
    각 데이터의 인덱스 숫자를 기준으로.
from sklearn.model_selection import StratifiedKFold 
#단순 KFold를 사용할 수 있지만 stratified가 추가된 버전을 사용하자!

folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=55) 
#KFold 생성기 생성=> 이후 folds.split(~)과 같은 방식으로 데이터를 쪼갬

잠깐, StratifiedKFold가 어떠한 방식으로 데이터를 쪼개는지 간단히 살펴보자.
K개의 폴드가 생성되므로, 쪼개는 경우의 수 역시 K일 것이다. 그 가운데 첫 번째 경우는 이하와 같이 쪼개진다.

(array([ 0, 1, 2, ..., 26454, 26455, 26456]), #train_index에 해당
array([ 4, 12, 23, ..., 26442, 26443, 26446])) #val_index에 해당

따라서 iloc을 이용하면 train에 해당하는 데이터와 val에 해당하는 데이터를 '인덱스'를 기준으로 쪼갤 수 있다.
KFold를 생성하고 각 경우에 대한 학습 성능을 산출하는 일련의 과정을 for문으로 합쳐보자.

2.2 for문으로 합치기: 각 폴드에서의 예측 점수를 반환

  • enumerate : 출력되는 현재 for문에 몇번째에 대한 for문인지 알려줌
  • 각각의 학습이 서로 독립적으로 이루어지도록, classifier를 매번 새롭게 선언해야 함.
  • 문자열 formatting 문법 기억!"%d번째 학습 결과는 %.4f점 입니다.\n\n"%(n_fold+1,score)
    https://studymake.tistory.com/179
scores = []
n_splits=5
folds = StratifiedKFold(n_splits=5, shuffle=True, random_state=55)

#각각의 학습이 서로 독립적으로 이루어지도록, classifier를 매번 새롭게 선언해야 함.
for n_fold, (train_index, val_index) in enumerate(folds.split(train_x, train_y)):
  X_train, X_val = train_x.iloc[train_index], train_x.iloc[val_index]
  Y_train, Y_val = train_y.iloc[train_index], train_y.iloc[val_index]
  clf = RandomForestClassifier()
  clf.fit(X_train, Y_train)
  Y_val_proba = clf.predict_proba(X_val)
  Y_val_onehot = pd.get_dummies(Y_val)
  score = log_loss(Y_val_onehot, Y_val_proba)
  print("%d번째 학습 결과는 %.4f점 입니다.\n\n"%(n_fold+1,score))
  scores.append(score)

  if n_fold+1 == n_splits:
    avg_score = sum(scores)/n_splits #numpy통해 np.mean(scores)로 바로 구할 수 있음.
    print("평균 점수는 %.4f점 입니다!"%avg_score)
    break

>>> 1번째 학습 결과는 1.0524점 입니다.
2번째 학습 결과는 1.0799점 입니다.
3번째 학습 결과는 1.1412점 입니다.
4번째 학습 결과는 1.0329점 입니다.
5번째 학습 결과는 1.0653점 입니다.
평균 점수는 1.0743점 입니다!

2.3 최종 Test (앙상블)

KFold를 사용함에 따라, 주어진 데이터로 총 K번의 서로 다른 학습을 진행할 수 있게 되었다.
이같은 방식으로 랜덤포레스트 classifier를 튜닝하고, 더 좋은 성능의 모델을 만들 수 있다.
=> 이때 각 fold별 모델을 test 데이터에 대한 추론으로 바로 사용하여 제출물을 만들 수도 있다. (= 앙상블)
=> 1개밖에 없던 분류기를 -> k개로 늘린 것 -> val은 각 분류기의 성능을 대략 예측해줌 -> 동일한 test 데이터에 대해 각 분류기가 k가지의 서로 다른 예측 결과를 반환함  

➡️모델 전체에 대한 최종 성능 = mean(k개의 성능 점수)  
➡️모델이 test에 대해 최종 예측한 결과 = mean(k개의 예측 결과)

scores = []
sub = np.zeros((test_x.shape[0],3)) # 제출해야 하는 값: test_x의 row X 3개의 columns

#각각의 학습이 서로 독립적으로 이루어지도록, classifier를 매번 새롭게 선언해야 함.
for n_fold, (train_index, val_index) in enumerate(folds.split(train_x, train_y)):
  X_train, X_val = train_x.iloc[train_index], train_x.iloc[val_index]
  Y_train, Y_val = train_y.iloc[train_index], train_y.iloc[val_index]
  clf = RandomForestClassifier()
  clf.fit(X_train, Y_train)
  Y_val_proba = clf.predict_proba(X_val)
  Y_val_onehot = pd.get_dummies(Y_val)
  
  sub += clf.predict_proba(test_x) #얘랑

  score = log_loss(Y_val_onehot, Y_val_proba)
  scores.append(score) #얘랑 구분하기!!

sub = sub / 5
np.mean(scores) #fold별 추론 값들의 평균 (다섯 번의 추론 결과 평균)
sample_submission.to_csv("5fold_prediction.csv", index=False)


출처
https://www.youtube.com/watch?v=fBBHiShcJZo&list=LL&index=3

가쟈가쟈가쟈~

728x90
728x90
#1 불균형한 데이터 분포 전처리하기
#2 (Random Forest) train-test 분할 및 간단한 모델 학습
#3 Validation 데이터 분할, K-fold 교차검증 

1. train-test 분할

(1) 기존에 train과 test 데이터를 한꺼번에 전처리시키기 위하여 -> 각각을 'data'라는 이름의 데이터프레임으로 합침

data = pd.concat([train,test], axis=0)

(2) 이후 결측치 제거하고, 불균형한 데이터에 대한 전처리(이전 포스트)를 진행함

data.isnull().sum() 
data = data.drop("occyp_type", axis=1)
#data 데이터프레임에 이를 반영 #concat에서의 문법과 비교할 것.

(3) 전처리가 끝나면, 모델 학습을 시작함 => 전처리가 반영된 data를 train용과 test용으로 다시 분리해야 함.

train.shape
test.shape #기존 train 및 test 데이터의 크기 파악
data.shape #전처리 반영된 data의 크기 파악

train = data[:-10000] #데이터프레임 인덱싱에서 :는 column이 아닌 row만! #train에 해당
test = data[-10000:] #test에 해당

(4) train과 test 데이터 각각, 클라스 정보와 라벨 정보(정답)을 분리

#train
train_x = train.drop("credit", axis=1) #credit column을 제외한 train
train_y = train["credit"]
#test
test_x = test.drop("credit", axis=1)
test_y = test["credit"]
* 데이터프레임 인덱싱에서 loc 유의사항
train.loc[:"credit"]이라고 하면, 전체 행 X credit까지의 열: 즉 표 전체가 출력됨
특정 column만 추출하고 싶다면, train.loc[:,"credit"]과 같이 콤마를 추가해야 함

 

2. Random Forest

트리 기반 앙상블 모델 (사이킷런에서 제공하는 머신러닝 툴)
RandomForestClassifier()
분류기.fit 메소드
분류기.predict_proba 메소드
numpy의 np.argmax(예측확률, axis = 방향)

 

(1) RandomForest 분류기 생성한 후 이것으로 학습 진행

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier() #랜덤 포레스트 분류기 생성

clf.fit(train_x, train_y) #이미 정답이 주어진 train 데이터에 대해서는, fit을 통해 학습시킴
# 결과를 따로 저장할 필요 없이, 내부에 스스로 저장됨

(2) test_x에 대한 예측 및 결과 저장

학습된 분류기를 test_x에 적용하여, 예측 결과 반환
test_proba = clf.predict_proba(test_x)
print(test_proba)

#데이콘 원칙 상, 주어진 sample_submission에 아래 예측 결과를 집어넣어야 함.
sample_submission.iloc[:,1:] = test_proba

해당 예측 결과를 csv 파일로 변환
데이터프레임.to_csv("파일명")

sample_submission.to_csv("sample_submission_ver1.csv", index=False)

 

출처:

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

모두 데이콘 합시다아

728x90
728x90
#1 불균형한 데이터 분포 전처리하기
#2 (Random Forest) train-test 분할 및 간단한 모델 학습
#3 Validation 데이터 분할, K-fold 교차검증 

1. 분포 상태 확인 후 그룹화

 data.apply(lambda x : len(x.unique()))

모든 인덱스에 대한 값을 한꺼번에 반환하기

  • apply: 데이터프레임["컬럼"].apply(함수명)=> 해당 함수를 우리가 기존에 정의한 데이터프레임 중 A컬럼에 대해 적용df['A'].apply(plus_one) / df['A'].apply(lambda x : x+1)
  • lambda: lambda 매개변수 : 표현식 => 함수를 딱 한 줄만으로ex. (lambda x,y: x + y)(10, 20)
  • len, unique메소드 이용 : unique는 데이터에 고유값들이 어떠한 종류들이 있는지 알고 싶을때 사용하는 메소드

https://wikidocs.net/64
https://koreadatascientist.tistory.com/115
https://jaaamj.tistory.com/112

 

2. 요소 개수를 기준으로 세 개의 그룹으로 분할

2.1 group_1: 2개 이하

이진변수 인코딩(0과 1로 표현)

data['gender'] = data['gender'].replace(['F', 'M'], [0, 1])

 

2.2 group_2: 2개 초과 10개 이하

(연속형 숫자) 극소수의 2초과 값 모두 2로 변환
data.loc[data['child_num']>2, 'child_num'] = 2​

(문자) sklearn의 preprocessing 가운데 LabelEncoder()를 통해 문자형 카테고리를 숫자형으로 변환
label_encoder = preprocessing.LabelEncoder()

for x in ['income_type', 'edu_type', 'family_type', 'house_type']:
  data[x] = label_encoder.fit_transform(data[x])
  print(data[x].unique,"\n---")​

 

2.3 group_3: 10개 초과

(연속형 숫자, 요소 종류가 아주 많을 때)
마찬가지 구간화하되 group_2처럼 통일시키는 게 아니라 구간을 여러 개로 만들어버림:
- numpy의 histogram 메소드(bins=) 통해 bin_dividers 생성
- pandas의 cut 메소드(bins=) 통해 데이터를 실제로 분할
- 그러나 위 결과는 연속형이 아닌 이산형 dtype이므로 pandas의 factorize 함수 통해 int로 변환
=> 일련의 과정을 하나의 함수로 단순화하기.
def make_bin(array, n):
  array = -array #대부분의 요소가 음수이므로 양수로 변환 ★★★
  _, bin_dividers = np.histogram(array, bins = n)
  cut_categories = pd.cut(array, bins = bin_dividers, include_lowest = True, 
                          labels = list(range(n)))
  bined_array = pd.factorize(cut_categories)[0]
  return bined_array​

*value_counts나 plot 사용하려면 numpy-array가 아닌 pandas-Series 형태여야 함. => pd.Series(~)

 

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

모두 데이콘 합시다아

728x90
728x90

김성훈, 김우진, 장연주 and 김현철. (2021). 설명 가능한 AI 학습 지원 시스템 개발.

컴퓨터교육학회 논문지, 24(1), 107-115.

 

교수자를 위한 설명 가능한 AI 학습 지원 시스템을 제안 :

인공지능 모델과 XAI 분야의 기법을 교육 도메인에 적용하여 맞춤형 학습이 가능한 AI 학습 지원 시스템

 

  • 시스템은 학습자의 인지적, 환경적 영역의 데이터를 이용해 개별 학습자를 진단한다.
  • 제안한 시스템은 인공지능 모델인 DKT와 XGBoost를 이용해 학습자의 지식 상태를 모델링하고, 그 결과를 설명 가능한 인공지능 기법인 LRP와 SHAP으로 분석해 학습자의 지식 상태를 해석 가능한 형태로 교수자에게 제공한다.
  • 교수자는 이 정보를 통해 학습자의 교과 이해 정도와 학습에 영향을 미치는 환경적 요소를 파악하여, 맞춤형 학습을 제공하는 데 활용할 수 있다.

 

XAI 연구 문제인 블랙박스 설명(Black Box Explanation)의 3가지 종류

  • 모델 설명(Model Explanation): 데이터 전체에 대해 전역적(global) 설명
  • 출력 결과 설명(Outcome Explanation) : 데이터의 특정 인스턴스(instance)에 대해 지역적(local) 설명

⇒ 블랙박스 모델의 숨겨진 내부 논리를 추출하여 사람이 이해할 수 있는 형태로 표현

  • 모델 검사(Model Inspection): 특정 예측값 또는 블랙박스 모델의 특성을 이해하고자, 시각적 표현으로 설명을 제공한다. (ex. 데이터 속성의 변화에 따른 모델 민감도나 모델의 특정한 예측에 영향도가 높은 뉴런의 발견 등)

 

교육적 의의 및 활용 방안

  1. 인지적 영역 모델링의 결과물을 시각화하여 나타낸 개념 간 상관관계는 상위 개념의 이해를 위하여 어떠한 하위 개념들이 선행되어야 하는지를 해석할 수 있다. 따라서 이를 활용하여 교과 개념의 위계를 재정립하거나 수정하는데 참고로 사용될 수 있다.
  2. 교수자는 교수 학습자의 학업 성취에 영향을 미치는 주요 환경적 요인을 파악하고 맞춤형 상담을 제공할 수 있다.
    • 학습자의 환경에는 가족 구성원의 크기, 부모의 직업 등 가정환경과 수업 결손여부, 교우 관계 등 학업실태에 대한 정보를 포함한다. 이러한 환경은 학습자의 학업 성취에 중요한 영향을 미친다[9]. 따라서 학습자의 환경적 영역 정보를 사용하여 학습자 성적에 커다란 영향을 미친 학습자 환경 요소를 파악하고자 한다. 학습자 환경 요소를 바탕으로 학습자의 성취 정도를 예측하고, 그 예측에 학습자의 환경적 영역 중 영향도가 큰 영역 분석이 가능한 모델을 제시한다.
  3. 최종 성적을 예측하는 모델
    • 한 학습자의 최종 성적 예측값에 어떠한 과목이 긍정적인 또는 부정적인 영향을 주었는지 분석
  4. 시스템은 local explanation 기법들을 사용한다. 전체 분포에서 학습자의 상대적 위치나 수준 정보가 아닌 학생 개개인에 대한 분석을 제공하므로, 예상되는 학습자의 심리적 부담 경감을 기대할 수 있다.

 

 


 

 

본 논문이 강조하는 차별점 가운데 하나가, KT와 XAI를 학업 성취에 영향을 미치는 환경적 요인을 진단할 때 활용하였다는 지점이다. 교육학 연구에서 양간 상관관계를 설명하려는 차원에서는 유의미하겠으나, 교육 현장에서 학생 개인의 환경변수를 수집하고 이를 바탕으로 개인의 성취도/성적을 예측하는 것이 과연 교육적 의미를 가질지 의구심이 들었다.

스티그마 효과만 낳지 않는가? 

(대개는 개인의 의지와 무관하게 미리 형성되어버린) 환경 변수를 바탕으로 개인의 (후천적인) 성취도를 예측하는 것. 이것을 상담에서 활용하는 것이 과연 교육적으로 어떠한 가치가 있을지에 대해서는 후속적 논의가 필요할 것이다.

데이터를 정확하게 수집할 때 예민한 정보에 대한 프라이버시 문제도 발생한다.

728x90
728x90

초등 인공지능 교육을 위한 설명 가능한 인공지능의교육적 의미 연구(2021)

박다빈․신승기, 서울교육대학교 교육전문대학원 인공지능교육전공

 

1. ‘설명가능한’ 인공지능의 필요성 제고 (국제적 경향)

  • 대통령 직속 4차산업혁명위원회의 ‘인공지능의 대중화’를 위한 대국민 인식조사 결과 많은 국민들이 인공지능(Artificial Intelligence, AI)시대의 도래를 공감하면서도, 교육경험, 활용수준, 신뢰도 부분은 향상이 필요하다고 답하였다.  (인공지능의 신뢰도 향상에 대한 윤리적인 요구 또한 증가)
  • 유럽: 인공지능의 의사결정에 관한 신뢰도를 높이기 위하여 XAI 지속적으로 강조
    이는, 유럽인들의 삶에 영향을 미치는 누군가의 의사결정에 대하여 설명해야 한다는 유럽일반정보보호규정(General Data Protection Regulation)에 부합하는 개념이다[21].
  • 미국: 인공지능 기술이 도입된 주택대출, 신용카드 발급 등의 금융 분야에서 인공지능의 의사결정에 이유를 제공하도록 법적으로 의무화하고 있다[22].
  • 인공지능은 점점 인간의 삶에서 중요한 부분에서 의사결정을 내리고 있으며 그 결정에 대한 이해 및 신뢰도를 높이기 위해서는 사용자에게 인공지능 의사결정의 이해를 알기 쉽게 설명해주고 의사결정을 보장해주는 법적인 제도와 윤리적인체계가 요구된다.

 

2. XAI가 필요한 이유

  • A. Adadi, M. Berrada(2018)
    1. 인공지능의 결정에 대해 정당하게 설명하기 위한 근거가 된다(Explain to justify). 특히, 예기치 못한 인공지능의 결정에 대한 정당한 설명을 제공한다.
    2. 인공지능의 잘못된 것을 바로잡을 수 있다(Explain to control). 중요한 결정 상황에서 심각한 오류 등을 방지할 수 있다.
    3. 인공지능을 지속적으로 개선하기 위함이다(Explain to improve)
    4. 새로운 지식을 얻을 수 있다(Explain to discover).누군가에게 설명을 요청하는 것은지식을 얻기 위한 새로운 사실을 배우는 데 도움이 되는수단이다. 설명 가능한 인공지능 모델은 다른 분야에서의 통찰을 제공해줄 수 있다[2]
  • Arrieta et al(2020)
    • 인공지능과 관련된 대상에 따라서 왜 XAI가 필요한지 달라진다고 하였다.
    • 데이터 과학자, 개발자 등은 상품이나 제품의 효과성, 연구, 새로운 기능들을 확인하고 개선시키기 위해
    • 인공지능 모델의 의사결정에 의해 영향을 받는 사용자의 경우에는 그러한 결정이 공정한지 입증하기 위해서

3. XAI을 주제로 한 교육 사례

 

Jose M. Alonso(2020)가 고등학생을 대상으로 하는 ‘XAI4TEENS’라는 XAI 교육 프로그램을 개발하였다.

- 농구 선수 데이터를 가지고 스크래치로 코딩하고 의사결정트리 분류기를 활용하여 선수 데이터를 분류

- 시각화 하여 그래프로 결과를 나타내본다.

효과: 학생들은 신체적인 특성과 과거의 점수 데이터만을 활용하여 성별과 피부색에 관계없이 선수를 선발할 수 있는 설명 가능한인공지능을 만들고 체험할 수 있다.

 

4. XAI가 설명을 제공하는 원리

  1. Samek, W et al(2017)
    1. SA(Sensitivity Analysis)기법
      입력 변화에 대한 예측 결과의 변화량을 정량화하여 어떤 부분이 결과 도출에 큰 영향을 끼쳤는지 설명
    2. LRP(Layer-Wise Relevance Propagation)기법: 딥러닝 모델에서 각 레이어별 기여도를 측정하는 방법
    3. 이 모델을 이해시키기 위한도구로서 히트맵(heat map)을 사용한다. 이러한 시각화도구는 어떤 모델이 적절한지, 어떻게 인공지능이 구현되었는지를 설명하는 중요한 장치가 된다.
  2. Gunning, D., & Aha, D.(2019)
    • Explanation interface: 인간의 이해와 모델을 연결할 수 있는 방법
      • 그래프, 그림 등으로 시각화(visualization) 기법
      • 인공지능 사용자의 심리적인 모델(Mental model)을 만들어 이해의 평가도구로 활용
  3. Derek Doran et al(2017): 현재 대부분의 설명 가능한 인공지능의 문제들은 해석 가능하고 이해하기 쉬운 모델에 관한 연구가 대부분이라고 말한다. 하지만, 설명 자체를 제시하지 않는 점이 한계라고 말한다. 따라서, 설명 가능한 인공지능을 구현하는 과정에서 가장 중요한 것은 명시적인 자동 추론 기능을 공식화하는 것을 강조한다. 즉, 기계에서 표현되는 기호 — 그 기호로 설명되는 개념을 연결시키는 것추론 엔진이며 이것이 설명 가능한 인공지능의 핵심이라고 주장한다[5]

<설명 가능한 인공지능 모델에 적합한 해석 기법을 적용하기 위한 두 가지 분류 기준>
Arrieta, A. B. et al(2020)*어떤 상황의 경우 두 가지 분류기준에 모두 속하기도 한다

  • 투명한 모델(Transparent models)이란 모델 그 자체가 어느 정도의 해석력을 지니는 것을 의미한다. 모델을 기반으로 인공지능의 결정에 대한 해석이 구조적으로가능
  • 사후 설명가능성(Post-hoc explainability)은 쉽게 해석할 수 없는 모델을 위해 고안된 것이다. 이 방법은 외부 기법에 의해 설명되는 것인데 주로 사용되는 기법은 텍스트 설명, 시각적 설명, 부분 설명, 예시 설명, 단순화 설명 등이 있다.
    1. 텍스트 설명(Text explanation)이란, 모델의 기능을 심볼(symbol)로 생성하는 것을 의미하는데 인간의 언어나 수식 등을 활용
    2. 시각적 설명(Visual explanation)이란, 모델의 행동을 시각적으로설명하는 것으로 가장 많은 방법들과 함께 사용되어인간의 이해도를 높인다
    3. 부분 설명(Local explanation)은전체 모델의 일부만을 집중하여 설명하는 것
    4. 예시 설명(Example explanation)은 특정 모델로 인해 생성된결과와 관련된 예시를 추출하는 방식
    5. 단순화 설명(Simplification explanation)은 훈련된 모델에 기초하여 복잡한 것을 줄이며 설명을 위한 새로운 시스템을 만드는 방법

5. 설명 가능한 인공지능의 교육적 의미

  1. 설명 가능한 인공지능교육은 인공지능의 블랙박스 문제를 해결하는 것을 목표로 한다. 그리고, 인공지능의 블랙박스 문제는 인공지능과 함께 살아가는 사람의 삶과 연관되어 있다. 그 문제를 해결하기 위해서는 인공지능 알고리즘 교육과 실생활 문제와 관련된 인공지능 모델을 이해하는 것을 넘어 언어와 그림으로 설명할 수 있는 교육이 동시에 이루어져야 한다. 이러한 문제 해결 과정을 통해 학생들은 문제해결력을 기르고, 인간과 관련된 인공지능 문제를 해결함으로써 사람 중심의 인공지능 교육을 가능하게 한다.
  2. 알고리즘 교육을 통해 인공지능의 원리를 이해하고 실생활 문제 상황과 관련된 인공지능 모델을 설명하며 인공지능의 활용 분야까지 확장할 수 있다.
  3. 인공지능 교육의 영역이 서로 간 연계가 되어야 한다는 점에서 볼 때[1], 설명 가능한 인공지능 교육은 인공지능의 원리, 활용, 윤리적인 부분까지 다룬다는 점에서 인공지능 교육 요소에 중요한 부분이다

6. 초등학교에서 설명 가능한 인공지능 교육 방안

  1. 실제 삶과 관련된 문제를 설명 가능한 인공지능 교육 전반에 적용될 수 있도록 해야 한다.
  2. 초등 인공지능 알고리즘 교육에서는 알고리즘 자체가 해석력을 지닌 것을 사용하는 경우가 많다. 인공지능 모델을 설명하는 활동에 자체 해석력을 확보한 모델을 사용하는 것이 좋을 것이다.
  3. 인공지능 모델의이해가 설명으로 나아가기 위해서는 다양한 교수학습방법 및 도구를 활용해야 한다. 누군가를 이해시키는데가장 효과적인 기법 중 하나는 시각화이다.

 


본 논문은, "교육에서 XAI가 필요한 상황/필요성"이 무엇일지 고민해보게 했다.

  1. 학생들로 하여금 인공지능의 개념과 원리를 이해를 돕기 위해 XAI를 사용?
  2. 실제 (교육) 상황 속에서 인공지능을 사용할 때, 인간 중심적으로,주체적인 사용자가 되기 위해 X를 필요로 하는 것?
  3. 데이터 (인공지능) 리터러시 교육의 측면에서..?

필자가 교육 분야에서 XAI가 필요하다고 주장할 때, 주로 2번 상황에 국한해왔으나 본 논문은 '초등 인공지능 교육을 위한'이라는 제목에서 짐작할 수 있듯, XAI 도입 사례를 소개할 때 1번 상황에 더 집중한 것 같다.

그러나 '모든 학생들에게 인공지능 개념 교육을 시행해야하는가?'라는 질문에 회의적인 입장으로서, XAI의 필요성을 논할 때 2번과 3번 상황에 더욱 방점을 두어야 한다고 생각한다.

(한편으로는, 2와 3을 제대로 실현하기 위해서는 1번이 선행되어야 하는가?라는 질문도 생긴다.)

더불어, 초등 인공지능 교육이라는 주제에서 벗어나 교육에서의 XAI의 활용을 더 넓게 생각하자면, 투명한 모델 중심으로 XAI를 활용하는 방식에는 한계가 상당히 클 것 같다. 사후 설명가능성 모델을 도입할 때 각각의 설명 기법이 어느 시점에 어떠한 빈도와 형태로 제시되어야 하는지에 대한 고민이 필요할 것이다.

 

 

728x90

'HCI > Learning Analytics' 카테고리의 다른 글

Deep Knowledge Tracing  (0) 2022.07.27
인간의 직관과 빅데이터 기반 딥러닝의 비교  (3) 2022.07.19

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

728x90

축? 차원? axis? dim? 비슷한 듯 달라서 자주 헷갈렸었다.

Numpy와 Tensorflow에서 자주 등장하는 axis, dim의 차이를 정리해보고자 한다.

특히 axis와 dim은 행렬의 연산(concat, stack, sum, max...)의 방향을 설정하는 데 사용되므로, 확실히 짚고 넘어가보자.

 

 axis (축) 

배열의 차원 연산 방향 설정 시, axis의 해석 적용 예시
1차원 축은 axis = 0 하나 뿐이다. (행과 열로 구분되지 않음) dim_1 = np.array([0,1,2])
2차원 axis = 0 : 행 방향 (y 방향, 세로 방향)
axis = 1 : 열 방향 (x 방향, 가로 방향)
dim_2 = np.array([[0,1,2],
                             [3,4,5]])
* shape가 (2,3)

dim_2.sum(aixs=0) = [0+3, 1+4, 2+5]
                               = [3,5,7] (행 방향으로 합)
dim_2.sum(aixs=1) = [0+1+2, 3+4+5]
                               = [3, 12] (열 방향으로 합)
3차원 axis = 0 : 너비 방향 (z 방향)
axis = 1 : 행 방향 (y 방향, 세로 방향)
axis = 2 : 열 방향 (x 방향, 가로 방향)
dim_3 = np.array([[[0,1,2],
                               [3,4,5]],

                               [6,7,8],
                               [9,10,11]]])
* shape가 (2,2,3)

dim_3.sum(aixs=0) = [[0+6, 1+7, 2+8],
                                   [3+9, 4+10, 5+11]]
                               
                                = [[6,8,10],
                                   [12,14,16]]
                                   (너비 방향으로 합)

* 4차원 이상이 되면, 더 이상 행렬 개념으로 이해할 수 없음.

* 주어진 배열의 차원이 무엇이냐에 따라 axis = 0, axis = 1, ...가 가리키는 방향이 달라진다 ! 상대적 개념.

* axis를 지정하지 않고 sum을 할 경우 모든 원소의 합이 계산된다.

 

+ 2차원 배열에 대한 axis 개념을 직관적으로 잘 표현한 도식이 있다.

이미지 출처: jalammar.github.io/visual-numpy/

+ 3차원 배열에 대한 axis 개념을 직관적으로 잘 표현한 도식이 있다.

이미지 출처:&nbsp;https://acdongpgm.tistory.com/140

 

참고 페이지: https://pybasall.tistory.com/129

 


 dim  

* 주의: dim이 dimension(=차원)의 준말이기는 하나, 이때 '차원'의 두 가지 해석에 유의해야 한다.

* dim은 특정 텐서의 속성이기도 하고, 연산 방향을 설정할 때 사용될 수도 있다.

'차원'의 두 가지 의미
벡터나 행렬의 '열' 개수 ex 1. [1,2,3]는 3차원 벡터이다.
ex 2. 이번에는 이진 분류가 아닌 칠진 분류 task이므로, 7차원 벡터로 반환해야 한다.
텐서가 존재하는 '축'의 개수
=> ①
ex 1. [0,1,2]는 1차원 텐서(벡터)이다.

ex 2. [[0,1,2],
          [3,4,5]] 는 2차원 텐서(행렬)이다.

ex 3. [[[0,1,2],
           [3,4,5]],
           [6,7,8],
           [9,10,11]]] 는 3차원 텐서(행렬)이다.

ex 4. 점은 1차원, 직선은 2차원, 정육면체는 3차원!

 

배열의 차원 연산 방향 설정 시, dim의 해석 => ②
1차원 축은 axis = 0 하나 뿐이다. (행과 열로 구분되지 않음)
2차원 dim = 0 : 행 방향 (y 방향, 세로 방향) (* dim= -2)
dim = 1 : 열 방향 (x 방향, 가로 방향) (* dim= -1)
3차원 dim = 0 : 행 방향 (y 방향, 세로 방향) (* dim= -3)
dim = 1 : 열 방향 (x 방향, 가로 방향) (* dim= -2)
dim = 2 : 너비 방향 (z 방향) (* dim= -1)

 

* dim은 주어진 배열의 차원이 무엇이든지 관계 없이 axis = 0, axis = 1, ...가 가리키는 방향이 동일하다.

  속상하게도 axis에서 정한 방향과 다른 부분이 있으니 헷갈리지 말 것!

  그러나 dim=-1, dim=2,.. 이 가리키는 방향은 상대적으로 바뀌게 된다.

 

 

참고 페이지: https://questionet.tistory.com/25

 

 

 


+ a:

len size ndim shape reshape flatten
파이썬 내장 함수 numpy.ndarray 객체의 메서드 (파이썬 list나 string에 사용 불가)

ndarray.XX
첫번째 차원(행)의 원소 개수 행렬의
전체 원소 개수
행렬
전체 차원(dim) 표시
행렬의 shape 출력 배열을
새로운 shape로 변경 (*가능한 조건일 때)
n차원 행렬을 1차월 행렬로 reshape하여 복사본 출력

 

+ 미니배치 처리할 때는: (너비 값 즉 배치 사이즈 , 행 개수, 열 개수) 순서.

 

 

참고 페이지: https://tae-hui.tistory.com/entry/Python-numpy-%EB%B0%B0%EC%97%B4-%ED%81%AC%EA%B8%B0-%ED%98%95%EC%83%81-%ED%99%95%EC%9D%B8shape-ndim-size

https://blog.naver.com/PostView.nhn?blogId=life4happy&logNo=222170909964 

728x90

'개발' 카테고리의 다른 글

colab에서 .py 실행하기  (0) 2022.07.10

728x90

오늘 교육공학 연구실 세미나에서 배우고 느낀 점을 이하와 같이 정리해보고자 한다.

나의 의견에 대한 반박과 아이디어는 언제나 환영,,, 🌝

 

1. 인간의 직관 VS 빅데이터 기반 딥러닝

공통점 차이점
1) 경험이 축적된 것
    ⇒ 즉 인간의 직관 역시 체계적인 학습을 통해 후천적으로 양성 가능한 대상

2) 편향적 성격
3) 그 근거를 일목요연하게 설명하기 어려움.
    (블랙박스 모델)


1) 인간의 직관과 달리 인공지능은 (심지어 잘 구조화된 인공지능 모델이더라도) 자신이 모르는 것을 재빠르게 '모른다'라고 판단하는 데 상당히 오랜 시간이 걸린다. (자신이 갖고 있는 모든 데이터를 확인한 후 어떻게든 예측해낼텐데, 그 예측이 정답이면 잘 아는 것이고 오답이면 잘 모르는 부분이었다고 사후적으로 판단하게 된다.) 이와 달리 인간은 자신이 모르는 내용을 만나면 몇초 안에 스스로 '내가 모르는 내용이구나' 하고 판단해낼 수 있다.

2) 인간의 직관은 살아오면서 축적된 데이터 뿐 아니라 다양한 역량(논리력, 창의력, 분석력 등)이 복합적으로 결합한 결과일 것이다.

+

차이점 1번과 관련하여 떠오르는 아이디어가 있다

자신이 '이 부분은 정확히 예측할 것 같다(=나는 input에 대해 잘 알아)' 혹은 '정확히 예측하지 못할 것 같다(=나는 input에 대해 잘 몰라)'를 사전에 판단할 수 있는 인공지능도 있을까?

혹은 현재 input에 대한 예측 정확도는 n%야 라고 설명하는 인공지능이 개발되었을까?

--- 나아가 XAI와 관련된 아이디어인 것 같다는 생각도 든다.

 

사실 차이점 2번과 관련하여서는 내 의견에 대한 확신이 부족하다. 사실 인공지능의 예측 과정 자체가 블랙박스라, 인공지능에게도 어떠한 특별한 역량이 있다고 혹은 없다고 단정짓기 어려워 보인다.
+ 그렇지만 여전히, 인공지능은 주로 단일한 형태의 정형화된 데이터에 상당히 의존적인 모델이라고 생각한다.

이와 달리 인간의 직관은 상대적으로 더 입체적이고 다양한 방식으로 생성된다는 이미지가 있다. 예컨대, 경험 데이터의 형식이 훨씬 다양하고 정형화되어있지 않으며, 각 경험이 개인의 직관을 구성하는 방식 역시 역동적일 것이다.

+ 흠... 오히려 공통점에 가까운가..?

+ 그렇다면 차이점에 무엇이 또 있을까...?

 

 

2. 분야별로, 교과별로 필요한 직관은 서로 다르다. 

 

3. 나의 탐구 주제:

"인간과 AI 간 관계가 보다 신뢰롭고 긍정적이도록 형성하려면 어떤 전략/요소가 필요할까?"

"XAI에서 X한다면 어떤 방식으로 제공되는 것이 적절할까? 어느 시점에? 학습자가 X를 원하는 경우는 언제일까?"

 

 

-저작자표시

-비영리

-변경금지 !!!

728x90
728x90

     산업계뿐 아니라 일상 속에서 인공지능의 사용이 만연해지면서 인공지능의 신뢰도 향상에 대한 윤리적 요구가 증가하고 있다. 기존의 인공지능은 이른바 블랙박스라는 별칭을 가질 만큼 그것이 내린 결론의 구체적 원리나 근거를 이해하는 데 어려움이 있었다. 이에 따라 설명 가능한 인공지능(eXplainable AI: XAI)의 필요성이 제고되었으며, XAI는 인공지능이 특정 결론을 내리기까지의 근거들을 사용자가 이해할 수 있도록 설명해주는 특성을 지닌다. 뿐만 아니라, 인공지능을 활용한 다양한 의사결정 과정에서 그것의 타당성을 검토하고 공정성에 대한 입증을 가능하도록 만들어준다.

     그러나 XAI는 현재 개발된 모든 인공지능 모델에 적용되는 것이 아니다. 현실적으로, 깊은 심층 신경망 기반의 복잡한 모델의 경우 학습 과정 자체가 고비용일 뿐 아니라 그것이 어떻게 특정 결론을 도출했는지 전문가조차도 그 근거를 이해하기 어려운 실정이다. 실제로, 많은 경우 인공지능의 설명 가능성이라는 특성을 취하기 위해 성능을 희생해야 하는 딜레마가 발생한다. 과연 사람들은 상대적으로 예측력이 떨어지더라도 설명 가능한 인공지능을 원할 것인가? 이러한 선택은 그 구체적인 상황이 무엇이냐에 달린 문제인데, 본 포스트에서는 해당 상황을 교육의 장으로 축소해보고자 한다.

     결론부터 말하자면, 교육의 장에서는 인공지능의 설명 가능성이 더 큰 가치를 지닌다고 볼 수 있다. 교육에서 인공지능을 활용하는 경우는 이하 네 가지로 간단히 정리해볼 수 있으며

(1) 인공지능에 대한 윤리 교육

(2) 기술적 측면에서의 인공지능 교육

(3) 학습 진단하기 위한 학습과학 측면에서의 인공지능

(4) 교육 현상을 설명하기 위한 통계적 분석

 

     첫 번째의 경우, XAI는 학생들이 인공지능을 접하고 마주하는 과정에서 그것을 보다 주체적으로 활용할 수 있도록 돕는다. 인간이 인공지능으로부터 근거와 설명을 요구한다는 것은, 인공지능의 결론에 일방적으로 의존하기보다 그것의 원리와 근거를 바탕으로 최종 결정을 인간 자신이 직접 결정하고자 하는 것이다. XAI에 대한 수요는 인간 주체성에 대한 강조라고 이해할 수 있으며, 인공지능을 처음 접하는 학생들에게 인공지능을 신격화하는 태도보다는 주체적으로 취사선택할 수 있는 대상으로 받아들이도록 하는 것이 바람직하다.

     그렇다면, 학습 진단 과정에서 인공지능을 활용하는 경우는 어떠할까? 학습과학에서 가장 경계하는 것 중 하나가, 학생에 대한 인공지능의 예측이 모종의 낙인효과를 초래하거나 학생에 대한 교사의 부적절한 기대(inappropriate expectation)를 유발하는 상황이다. 구성주의의 관점에서 교사는 모든학생이 학습 과정에서 성공할 수 있을 것이라 기대해야 하며 이를 위해 적절한 피드백을 제공해야 하는데, 인공지능의 예측을 근거 없이 신뢰하는 것은 이러한 태도에 상충하게 된다. 교사는 성능 높은 인공지능의 수행 결과를 비판 없이 수용하기보다, 비록 예측력이 상대적으로 저조하더라도 인공지능이 그러한 판단을 내린 근거를 참고하여 더 발전된 스캐폴딩을 제공하거나 수업 계획을 유동적으로 조절하는 데 활용하는 것이 합당할 것이다.

     마지막으로, 교육 현상을 설명하는 교육 통계의 과정에서도 XAI의 가치가 두드러질 수 있다. A. Adadi, M. Berrada(2018)에 의하면 인간은 XAI가 제공하는 설명을 바탕으로 인공지능의 오류를 발견할 수 있으며 이를 통해 교육과 관련한 중요한 결정 상황에서 심각한 오류 등을 방지할 수 있다는 점에서 유의미하다. 그뿐만 아니라, XAI가 교육 현상에 관하여 설명을 제공하게 될 때 연구자는 예기치 않은 새로운 지식을 얻을 수 있으며, 이는 교육 현상 연구를 위한 새로운 재료가 될 수 있다. 이에 따라 교육의 장에서 XAI의 필요성은 분명하며 인공지능의 설명 가능성이 충분한 교육적 가치를 함의한다고 볼 수 있다.

 

 

 

참고 문헌

1) 박다빈,and 신승기. "초등 인공지능 교육을 위한 설명 가능한 인공지능의 교육적 의미 연구." 정보교육학회논문지 25.5 (2021): 803-812.

2) Adadi, A., & Berrada, M. (2018). Peeking inside the black-box: a survey on explainable artificial intelligence (XAI). IEEE access, 6, 52138-52160.

 

-저작자 표시

-비영리

-변경금지

728x90

'HCI > Idea' 카테고리의 다른 글

학습장애, AI 관련 아이디어  (0) 2022.07.27
헬스 게임 아이디어 (HCI?)  (0) 2022.07.18

+ Recent posts