2024. 11. 5. 09:53ㆍAI
수업을 들으면서 Notion을 이용해 필기를 하고 있다. 오늘 회고는 필기의 덕을 보려고 한다. 기존에 했던 대로 4F방식의 회고를 진행하고자 한다. 다만, 필기한 내용을 바탕으로 첫 번째 F를 채우고자 한다. 요약을 도와주는 도구로 chatGPT를 사용하였다.
- FACTS(사실, 객관):
2024.10.28.
분류 평가 지표
모델을 평가하기 위해 다양한 분류 지표를 학습했습니다.
- 정확도(Accuracy): 올바르게 예측한 비율
- 정밀도(Precision): 양성 예측 중 실제 양성 비율
- 재현률(Recall): 실제 양성 중 모델이 양성으로 예측한 비율
- F1 점수: 정밀도와 재현율의 조화 평균
- PR Curve, AP score: 정밀도-재현률 곡선과 평균 정밀도
- ROC, AUC score: 수신자 조작 특성 곡선과 그 면적을 통한 평가
또한, Confusion Matrix를 통해 예측과 실제 값 간의 관계를 시각화하였습니다.
회귀 평가 지표
회귀 모델을 평가할 때 사용하는 지표들입니다.
- MSE (Mean Squared Error): 평균 제곱 오차
- RMSE (Root Mean Squared Error): 제곱근 평균 제곱 오차
- R² (결정 계수): 모델이 데이터를 얼마나 잘 설명하는지 나타냄
모델 일반화와 과적합
모델이 일반화되면 데이터에 잘 대응하지만, 과대적합(overfitting) 또는 과소적합(underfitting) 시 모델 성능이 저하될 수 있습니다. 모델이 과적합되지 않도록 규제 하이퍼파라미터를 조정하고, 테스트 에러와 학습 에러 차이를 줄이는 방법을 학습했습니다.
하이퍼파라미터 튜닝 (Grid Search, Random Search)
모델 성능 최적화를 위해 Grid Search와 Random Search 방식을 사용해 보았습니다.
- Grid Search: 모든 하이퍼파라미터 조합을 테스트하여 최적의 값을 찾는 방식
- Random Search: 일부 조합을 무작위로 선정해 최적값을 찾는 방식으로 시간 절약 가능
또한 **교차 검증(Cross Validation)**의 필요성과 이를 구현하는 GridSearchCV를 다루며, scoring 옵션에서 neg-MSE를 활용해 낮은 오차가 좋은 모델로 인식되도록 설정했습니다.
Pipeline과 Column Transformer
Pipeline을 사용해 모델 구성 단계를 리스트 형태로 순서대로 처리하는 방법을 학습했으며, 다음 시간에는 Column Transformer로 시작할 예정입니다.
2024.10.29.
ColumnTransformer
데이터의 컬럼마다 다른 전처리를 적용해야 하는 경우 ColumnTransformer를 사용해 컬럼별로 맞춤형 전처리를 할 수 있습니다. 이를 통해 다양한 데이터 타입을 효율적으로 처리할 수 있었습니다.
SVM (Support Vector Machine)
SVM은 딥러닝 이전에 널리 사용된 모델로, 두 그룹 간의 마진을 최대화하여 구분하는 방식입니다.
- Linear SVM은 gamma 파라미터를 사용하지 않고 선형 결정 경계를 만듭니다.
- 파라미터 조정이 성능에 중요한 영향을 미치므로 다양한 조합을 시도하여 최적의 설정을 찾습니다.
최근접 이웃 (K-Nearest Neighbors, KNN)
KNN은 새로운 데이터 포인트를 주변의 가장 가까운 K개의 이웃을 기준으로 분류하는 모델입니다. 거리 기반 분류 모델로 직관적이며 간단하게 적용할 수 있습니다.
Decision Tree
도메인 지식이 부족한 경우에도 Decision Tree를 활용해 데이터의 중요한 특징을 파악할 수 있습니다. Decision Tree는 분기를 통해 데이터의 중요한 속성들을 시각적으로 보여주기 때문에, 특성 중요도를 이해하는 데 도움이 됩니다.
2024.10.30.
앙상블 모델
여러 모델을 결합하여 성능을 높이는 앙상블 기법에 대해 살펴보았습니다. 이 방법은 단일 모델보다 강력한 성능을 보여, 분류 문제에서 특히 유용합니다.
경사하강법 (Gradient Descent)
경사하강법을 통해 **비용 함수(cost function)**를 최소화하며 최적의 파라미터를 찾는 방법입니다. 경사하강법의 주요 구성 요소는 다음과 같습니다:
- W_new = W - a * cost’(W): 새로운 파라미터 값(W_new)을 학습률(a)과 기울기(cost’(W))를 이용해 갱신하는 식입니다.
- a (학습률): 업데이트 속도를 조정하는 값으로, 값이 너무 크거나 작으면 학습에 문제가 생길 수 있습니다.
- cost’(W): 비용 함수의 기울기로, 최적화 방향을 결정합니다.
- 손실 함수, 학습률, max_iter: 손실 함수를 정의하고, 적절한 학습률과 최대 반복 횟수(max_iter)를 설정하는 것이 경사하강법의 핵심입니다.
또한, 모델 학습에 np.random.rand(개수, 0부터 범위)를 활용해 랜덤 샘플을 생성하는 방법을 익혔습니다.
2024.10.31.
Feature 수를 줄이는 방법
데이터의 차원을 줄여 모델을 간단하게 하고 성능을 높일 수 있는 다양한 방법을 배웠습니다.
- 차원 축소: 여러 컬럼을칼럼을 하나로 합쳐서 새로운 칼럼을 만드는 방식입니다. 예를 들어, '국어'와 '영어' 칼럼의 평균을 통해 '어학' 칼럼을 생성할 수 있습니다.
- 차원 선택: 중요도가 높은 컬럼만을 선택하여 사용하는 방법입니다.
- 규제(Regularization):
- Ridge (L2 Norm): w^2을 비용 함수에 추가하여 파라미터 값이 지나치게 커지는 것을 방지합니다.
- Lasso (L1 Norm): |w|을 추가하여 불필요한 파라미터를 0으로 만들어 선택된 특성 수를 줄입니다.
규제를 통해 모델의 가중치를 제어하며, a 값을 증가시킬수록 규제 강도가 커집니다.
로지스틱 회귀와 손실 함수
로지스틱 회귀의 손실 함수는 **로그 손실 함수(log loss)**를 사용하며, 이 방식은 Binary Cross Entropy라고도 합니다. 2진 분류 문제에서 손실을 계산해 모델이 학습할 수 있게 합니다.
군집 학습 기법
군집 기법에서는 데이터의 군집화 성능을 평가하기 위해 inertia를 활용합니다. inertia는 각 클러스터 중심에서 군집화된 데이터들 간의 거리의 합으로, inertia 값이 크게 떨어지지 않는 지점에서 적정 클러스터 수를 선택할 수 있습니다.
딥러닝 및 Colab
Google Colab에서 딥러닝 모델을 학습하기 위한 환경을 설정했습니다. Colab은 GPU를 사용할 수 있으며, Jupyter Lab과 유사하게 웹 브라우저를 통해 딥러닝 모델을 구성하고 실행할 수 있어 편리합니다.
2024.11.01.
딥러닝 개요 및 텐서 조작
딥러닝 모델의 핵심은 많은 파라미터와 연산을 효율적으로 처리하는 것입니다. 이를 위해 텐서를 다루는 다양한 기법을 익혔습니다.
- Tensor Slicing 및 Indexing: 텐서의 특정 부분을 가져오는 방법을 배웠습니다.
- Tensor 미분: 텐서의 미분 계산을 통해 딥러닝 모델의 학습 방향을 결정합니다.
학습과 추론에서의 torch.no_grad()
학습 중에는 파라미터의 **기울기(gradient)**를 계산해야 하지만, 추론(inference) 단계에서는 파라미터 업데이트가 필요 없으므로 torch.no_grad()를 사용하여 계산을 줄일 수 있습니다. 이를 통해 연산을 최적화하고 성능을 높일 수 있습니다.
방향성과 손실 함수
딥러닝 모델 학습의 목표는 **손실(loss)**을 최소화하는 방향으로 파라미터를 조정하는 것입니다. 모델이 손실이 적은 방향으로 점진적으로 학습하여 최적의 성능을 발휘하도록 유도합니다.
- FEELINGS(느낌, 주관):
가장 처음 드는 느낌은 1주일간 다룬 개념이 많다는 것이다. 또한, 이 개념들을 자유자재로 다룰 수 있는가 자문하게 된다.
두번째 드는 생각은 필기의 중요성이다. 평소에 필기를 잘해두면 이런 글도 손쉽게 만들 수 있기 때문이다. 조금 더 흥미롭게 복습하고, 회고할 수 있는 방법을 연구하고 싶다.
- FINDING(배운 것):
배운 것들은 일단 위의 내용들과 같다. 그리고 현재, 머신러닝과 딥러닝을 배우고 있는데, 복습을 하기 전에는 최근 2~3일 차의 있는 모델 쓰는 것만을 기억하였는데, 이전에 내용을 돌아보니까 배운 내용이 정말 많고, 복습할 내용도 많다는 것을 생각하게 된다.
하지만 수업을 하면서도 배우는 것 중에 하나는 내가 진정으로 코딩을 해야 하는 방법을 전문적으로 알아야 할까라는 의문이다. 질문을 제대로 하고, 그에 대한 오류를 GPT와의 대화를 통해서 나보다도 훨씬 나은 성능을 제시하는 결과를 도출해 준다. 그렇다면 내가 현재 공부하고 있는 이 작업은 무슨 의미가 있을까?
생각해보면 첫째로는 이런 GPT를 이해하는 발걸음이라는 생각이 든다. 신문을 보며, 거대 기업들이 많은 자본을 투자해서 데이터와 모델들을 구축해 나가고 있다. 그리고 이것을 개인이 따라잡는다고 생각하는 것은 어리석은 일일 것이다. 따라잡지는 못하더라도 이것이 어떻게 구동되는지 아는 것은 유의미하다고 생각된다. 또한 다른 여러 모델들도 어떻게 작동하는 지를 알게 되면 내가 질문할 수 있는 수준이 올라간다는 생각이 든다. 다시 생각해 보면, GPT는 나의 학습속도를 더욱 높여줄 도구가 될 것 같다.
두번째로는 GPT를 잘 활용하는 것이 중요해 보인다. 이것을 자유자재로 다룬다면, 인공지능의 개념적인 학습과 더불어 다른 여타 산업의 지식도 손쉽게 습득할 수 있을 것이기 때문이다. 다만, 그 가운데 글을 쓰는 것은 계속할 생각이다. 내가 습득한 지식을 소화할 수 있는 시간을 가져야 하기 때문이다.
- FUTURE(미래):
오늘 필기한 것을 기반으로 회고록을 작성해보니 복습의 필요성을 더욱 히 느낀다. 비록 검색하면 나오지만, 나 뇌에 컴퓨터를 넣지 않는 이상, 검색을 하지 않고, 나 뇌에 있는 정보량을 늘려야 정보량을 기반으로 창의적인 생각을 할 수 있을 것이기 때문이다. 다만, 그런 정보들의 방향성이 중요하다는 생각이 든다.
현재 사업가가 되고 싶은 마음은 여전히 있다. 그런 내 자신에게 더욱 다가가기 위해서 오늘 배운 내용, 이번 캠프 간에 배운 내용을 사업가가 되는 내 자신의 모습에 신속히 다가갈 수 있는 도구로 사용해야 할 것이다.
스스로에 대한 응원 한마디
최신기술을 사용하는 데에 주저하지 말자. 그리고 경험하고, 글로 남기자. 더 발전해나갈 수 있는 생각을 더해보자. 스스로에게뿐만 아니라 사람들에게 도움이 되는 것은 무엇이 있을지 생각해 보고, 할 수 있다면 실행해 보자.
'AI' 카테고리의 다른 글
[플레이데이터 SK네트웍스 Family AI 캠프 6기] 8주차 회고 (11/11~11/15) (1) | 2024.11.18 |
---|---|
[플레이데이터 SK네트웍스 Family AI 캠프 6기] 7주차 회고 (11/~11/01) (4) | 2024.11.11 |
[플레이데이터 SK네트웍스 Family AI 캠프 6기] 5주차 회고 (10/21~10/25) (3) | 2024.10.29 |
[플레이데이터 SK네트웍스 Family AI 캠프 6기] 4주차 회고 (10/14~10/18) (1) | 2024.10.21 |
SKN 6기 3주차 (3) | 2024.10.15 |