방명록
- AI 관련 지식(2)2024년 03월 13일 06시 53분 08초에 업로드 된 글입니다.작성자: 재형이반응형
- 오늘까지만 하고 내일부터는 실습 위주로 진행이 될 것이다
- 인공지능을 공부하면서 나는 어떤 쪽으로 방향을 잡고 깊게 들어갈 것인지를 계속 고민하고 있는데 쉽지 않다
- 모델을 만든다? 연구? 아니면 만들어진 것을 가져다가 사용하는? 어떻게 사용?
- 열심히 하는 것도 좋지만 하고 싶은 것이 무엇인지, 무엇이 더욱 미래 가치가 높은지를 충분히 고려한 후에 방향을 잡고 꾸준히 공부하는 것이 중요한 것 같다
1. XAI (eXplainable AI)
- XAI란 설명이 가능한 AI를 의미하며 우리가 사용하는 모델들의 결과가 왜 이런 결과를 도출하게 되었는지에 대한 고민을 조금이라도 덜어주기 위한 메뉴얼? 같은 것이다
- XAI를 함으로써 Model은 어떤 feature를 가장 중요하게 생각하는지, 각각의 feature가 Model 예측 결과에 어떠한 영향력을 주는지, 각 feature의 일반적인 효과는 어떻게 되는지에 대해 도움을 줄 수 있다
- XAI가 필요한 경우는 디버깅을 할 때, 피처 엔지니어링(하나의 피처와 다른 피처를 조합하여 연산하여 새로운 피처를 도출하는 작업을 할 때 인사이트를 줄 수 있음), 데이터 수집을 위한 가이드(가치있고 필요한 데이터만 수집할 수 있음), Model의 예측 결과를 바탕으로 중요 의사결정(model을 실제로 적용하기 위한 판단 근거)을 할 때 사용하면 도움을 받을 수 있다
- 즉, 한마디로 정리하자면 XAI는 모델의 학습 결과를 해석할 수 있는 방법이다. 모델 성능 개선을 위한 방법을 찾거나 예측 모델을 실제로 사용할 수 있게 하는데(=모델의 신뢰도 상승) 도움을 줄 수 있다
- XAI 방법
- Interpretable Models
– 해석이 가능한 형태의 모델 - Model Agnostic
– 모델의 종류와 상관없이 해석할 수 있는 방법 (예: SHAP) - Model Specific
– 모델 자체의 동작을 바탕으로 해석할 수 있는 방법 - Neural Representations
– 신경망의 학습 과정에서 추출한 feature의 시각화를 통해 신경망의 학습 내용을 이해
- Interpretable Models
2. Model의 성능 개선 방법 - 신경망 설계 관점 (Model Driven)
2-1. Weight Initialization
- 초기값을 무엇으로 할 것인지에 따라 모델의 성능이 좌우되기 때문에 잘 선택하는 것이 중요하다
- Xavier가 제안한 초기값 고르는 방법, He가 제안한 초기값 고르는 방법들을 사용하자
- 다행히 pytorch에서는 API 형태로 제공
2-2. Drop Out
- 학습 중에 은닉층의 뉴런을 무작위로 삭제하여 과적합을 예방하는 기법
- p라는 확률로 출력 노드의 신호를 보내다 말다 함
- 드롭아웃을 적용한 다음에 오는 계층은 앞 계층의 일부 노드들의 신호가 p라는 확률로 단절되기 때문에 훨씬 더 견고하게 신호에 적응
- 모든 애들을 다 고려해야할 필요가 있을까? 사람도 항상 뇌를 100% 사용하지 않는다! (애초에 100% 사용 못함ㅋ)
2-3. Batch Normalization
- 한 번에 입력으로 들어오는 배치 단위로 데이터 분포의 평균이 0, 분산이 1이 되도록 정규화 진행
- 빠른 학습 가능: learning rate를 높게 잡을 수 있음
- 자체적인 regularization 효과
- 데이터들을 어디에 뿌릴지! 데이터들을 얼마나 쎄게 뿌릴지!
- Vanishing Gradient 때문에 ReLU를 사용한들 데이터들이 너무 한쪽으로 쏠려있다면 과연 이게 ReLU인지 그냥 Linear인지 알 수 있을까?
2-4. Early Stop
# Train def traindata(device, model, epochs, optimizer, loss_function, train_loader, valid_loader): # Early stopping last_loss = 100 patience = 2 triggertimes = 0 for epoch in range(1, epochs+1): model.train() for times, data in enumerate(train_loader, 1): input, label = data[0].to(device), data[1].to(device) # Zero the gradients optimizer.zero_grad() # Forward and backward propagation output = model(input.view(input.shape[0], -1)) loss = loss_function(output, label) loss.backward() optimizer.step() # Show progress if times % 100 == 0 or times == len(train_loader): print('[{}/{}, {}/{}] loss: {:.8}'.format(epoch, epochs, times, len(train_loader), loss.item())) # Early stopping current_loss = validation(model, device, valid_loader, loss_function) print('The Current Loss:', current_loss) if current_loss > last_loss: trigger_times += 1 print('Trigger Times:', trigger_times) if trigger_times >= patience: print('Early stopping!\nStart to test process.') return model else: print('trigger times: 0') trigger_times = 0 last_loss = current_loss return model
2-5. Transfer Learning
- 기존의 만들어진 모델을 사용하여 새로운 모델을 만드는 방법
- 학습을 빠르게 하며 예측 성능을 더 높임
- 이미 잘 훈련된 모델이 있고, 특히 해당 모델과 유사한 문제를 해결 시 효과적
2-6. End to End vs Part
- end to end
- part
2-7. ML vs DL
- 딥러닝이 만능은 아니다
- 데이터셋이 충분하지 않을 경우에는 오히려 딥러닝보다 머신러닝이 더 효율적일 수 있다
3. Model의 성능 개선 방법 - 데이터 관점 (Data Driven)
3-1. Data Distribution
- 데이터를 정규 분포화를 시켜서 모델의 성능을 높이는 방법
- 데이터의 분포와 모델의 입출력으로 기대하는 데이터들 간의 분포 차이가 있는 경우에 사용
- 로그를 씌워서 정규 분포화, 데이터를 사용할 때는 다시 익스포텐셜을 취해준다
3-2. Data Scale
- 데이터들 간의 스케일을 맞춰준다
- 다양한 피처를 사용할 경우 그 피처에 따라 스케일이 맞지 않는 경우가 생김
- 특히, 거리를 측정하는 모델 같은 경우에는 스케일을 잘 맞춰주어야 함
- Standard Scaler는 평균은 0, 표준편차는 1인 정규 분포 형태로 변형해준다
- Min Max Scaler는 최솟값은 0, 최댓값은 1로 분포 형태를 변형해준다
3-3. Domain Knowledge
- 원본 데이터를 입력으로 넣을 때 이런식으로 분류하여 넣어야할 경우, 어떤 식으로 분류할 것인지에 대한 판단 근거는 해당 작업자가 가지고 있는 도메인 지식에 따라 차이가 발생할 수 밖에 없다
- 그렇기 때문에 해당 영역에 현직자들과의 협업이 중요하다
3-4. Feature Engineering
- 주어진 Feature를 변형하여 Target값과 더 관련있게 만들기 위한 작업
- Mutual Information, 수학공식 적용(예: 비율), count, 데이터 파싱, 데이터 결합, 그룹 변환, K-means, Encoding …
3-5. Dimension Reduction
- feature selection
- 특정 피처에 종속성이 강한 불필요한 피처는 제거하고, 데이터의 특징을 잘 나타내는 주요 피처만 선택
- feature extraction
- 피처를 함축적으로 더 잘 설명할 수 있는 또 다른 공간으로 매핑해서 추출
3-6. Train Set vs Test Set vs Real Data
- Train과 Test를 하기 위해 수집한 데이터가 현실과는 사실 차이가 많이 나는 데이터라면? 애초에 학습을 한다고 해도 현실에 적용했을 때 좋지 못한 결과를 보여줄 것이다
4. 시스템 관점에서의 인공지능의 이해
- ML에서는 사실 코드가 영향을 주는 부분은 굉장히 사소하다고 볼 수 있다. 그 외의 다양한 것들을 고려해야 좋은 모델을 만들 수 있다
반응형'인공지능 > 인공지능 기초' 카테고리의 다른 글
머신러닝 Learning Path (0) 2024.04.09 GAN(2), AI 관련 지식(1) (0) 2024.03.12 Auto Encoder, GAN(1) (0) 2024.03.11 NLP (3) (0) 2024.03.10 NLP (2) (0) 2024.03.09 다음글이 없습니다.이전글이 없습니다.댓글