플레이데이터 부트캠프 데이터 엔지니어링 트랙 6주차 (7.10~14)

안인균·2023년 7월 16일
0
post-thumbnail


이번 주차에서는 "머신러닝, 딥러닝"에 대한 학습이 이뤄졌습니다. 머신러닝 관련에서는 각종 학습 모델들을 학습할 수 있었고, 이후 딥러닝 모델의 구조, 정의 방식 등과 신경망 학습을 이루고 있는 구조 요소들과 다양한 내용들에 대해 알 수 있었습니다.


Liked

머신러닝의 다양한 학습 모델들을 배울 수 있는 시간이었습니다. 사실 이전에 머신러닝의 개념을 학습할 때마다 실습 예제에서 보았던 모델들이었습니다. 그래서 이해하는데 더 쉬운 느낌이 있었고, 더해서 학습 모델들의 각 파라미터들의 의미와 어떤 방식으로 모델링이 되고 각각의 차이에 대해 알 수 있어 좋았습니다. 또한 설명에서 참고되었던 그림과 실생활 예시 등이 좋았습니다.
또한 로지스틱 회귀에 대한 설명 이전에 경사하강법, 최적화 이론을 먼저 알게 되어서 이후 로지스틱 회귀를 이해하는데 더 좋았습니다. 그리고 Log loss 부분에 대해 이해가 잘 안된 부분을 질문해서 답을 얻을 수 있었습니다. 또한 로지스틱 회귀 규제에서 사용되는 "L1, L2 규제" 의 하이퍼 파라미터 값이 alpha가 아닌 C 인 점과 C와 규제 사이가 반비례 라는 점에서 1/C 로 사용된다는 점을 알 수 있어 좋았습니다.
추가로, np.log() 에서 log의 밑이 10 인줄 알았으나 "e" 임을 알게 되어 계산 결과의 의문을 해결할 수 있어서 만족했습니다.
딥러닝 과정 중에서는 MNIST 데이터 셋을 활용해 0~9 까지 손 글씨 이미지를 분류하는 모델을 작성했고, 그림판을 활용해 직접 숫자를 넣고 opencv 패키지를 통해 해당 이미지를 읽어서 직접 분류 모델에 넣는 과정을 할 수 있어서 좋았습니다. 이전까지 숫자로 이루어진 데이터들만 다루다가 직접 그림을 그려서 모델로 분류할 수 있는 과정을 진행한 것이 기억에 남았고 좋은 경험이었습니다.

Lacked

수업을 들으면서 코딩을 하는데 문제 없이 할 수 있었지만, 예시 문제가 다가왔을 때, 어떤 것부터 시작 해야하는 지 헷갈려해 아직 이해가 부족하다고 느꼈습니다. 또한 데이터 전처리 단계에서 원핫 인코딩을 해야할 지, 레이블 인코딩을 해야할 지 이런 부분에 대해 고민하는 것이 아직까지 각각의 개념들의 이해가 부족하다고 느꼈고, 꾸준한 복습과정이 필요하다고 느꼈습니다.
또한 새로 나오는 내용들이 점차 어려워지고, 많은 양을 한꺼번에 학습하다보니 헷갈리는 내용들이 많았습니다. 짧은 시간안에 많은 양의 내용을 빠르게 학습하는 것이 어쩔 수 없는 부트캠프의 한계인 것 같아서 아쉬웠습니다.

벡터 내적 과 행렬 곱 , 기본 수학적 지식이 부족해서 검색해서 따로 학습하였습니다. 머신 러닝 학습을 하면서 수학적 지식의 부족함을 느껴서 아쉬웠습니다.

Learned

  • 각종 학습 모델에 대해 배웠습니다.
1. SVM (Support Vector Machine)
2. K-최근접 이웃 (K-Nearest Neighbors, KNN)
3. 의사결정나무(Decision Tree ) - RandomForest 
  • 각 학습 모델에서 사용되는 파라미터들과 그 차이에 대해 알 수 있었습니다.

  • Ensemble(앙상블) 의 종류와 각각에 해당하는 방식, 모델링 하는 것을 학습하였습니다.

1. 투표 방식
	: `Baggin(RandomForest)` 과 `Voting(hard voting, soft voting)` 
2. 부스팅 방식
	: `GradientBoosting` 과 `XGBoost`
  • 선형회귀

과적합을 방지하기 위한 규제 :
1. Lasso regression (L1 규제)
2. Ridge regression (L2 규제)

  • 로지스틱 회귀

과적합을 방지하기 위한 규제 :
1. Lasso regression (L1 규제)
2. Ridge regression (L2 규제)
✅ 선형 회귀와 달리 alpha 값이 아닌 C 값을 사용, 또한 C와 규제가 반비례 관계이므로
L1, L2 규제의 식에서 1/C 을 사용.

  • 최적화 : 경사하강법

  • 딥러닝 모델 정의 방법에 대해 배웠습니다.

    1. Sequential 방식: 순서대로 쌓아올린 네트워크로 이뤄진 모델을 생성하는 방식
    2. Functional API 방식: 다양한 구조의 네트워크로 이뤄진 모델을 생성하는 방식
    3. Subclass 방식: 네트워크를 정의하는 클래스를 구현.

이 중 Sequential 방식으로 모델을 정의하였습니다.

정의 1: 모델객체를 생성하고 add() 메소드를 이용해 순서대로 Layer 를 하나씩 추가.
정의 2: 객체 생성시 Layer들을 순서대로 리스트로 묶어 전달.

  • 네트워크(모델)을 만들고, 컴파일 단계를 거쳐, 입력 데이터를 넣어 학습 및 추론, 검증하는 과정을 직접 하면서 학습하였습니다.
  • 신경망 구조에 대한 학습

    1. Input data
    2. Input Layer
    3. Hidden Layer
    4. Output Layer
    5. Output data -> Loss Function
    6. Optimizer
    7. Update 'weight'
  • 신경망 구조를 이루고 있는 각 요소들과 사용되는 함수들에 대한 학습

    • 유닛/노드/뉴런 (Unit, Node, Neuron)
    • Layer (층)
    Input Layer(입력층)
    Output Layer(출력층)
    Hidden Layer(은닉층)
    Fully Connected Layer (Dense layer)
    Convolution Layer
    Recurrent Layer
    Embedding Layer
    • 손실 함수
    binary_crossentrophy
    categorical_crossentropy
    sparse_categorical_crossentropy
    mse
    • 평가 지표
    • 최적화
    Gradient Decent (경사하강법)
    오차 역전파 (Back propagation)

Longed for

  • 복습 과정이 중요함을 알고, 꾸준히 복습을 진행, Github에 업로드할 예정입니다.
  • 알고리즘 학습을 꾸준히 할 예정입니다.
  • 학습하면서 몰랐던 내용, 궁금했던 내용들을 검색을 통해 알아가면서 해당 내용들을 정리해 블로그에 업로드 할 예정입니다.

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

잘봤습니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기