[Boostcamp AI Tech] 2주차 Day 1 학습 기록

bluegun·2021년 8월 9일
0

AI Tech 2기 활동

목록 보기
6/87

학습 내용

Deep Learning Basic

  • 딥러닝을 위해 필요한 스킬 3가지 : 구현능력, 수학(선형대수, 확률, 통계), 논문

  • 딥러닝의 4가지 key component

    • data(이미지, 말 뭉치 등)

    • model(학습하는 모델)

    • loss function(모델을 학습시킨다)

    • algorithm(loss function을 최소화)

    • 4가지를 이해하면, 논문에서 설명하는 내용이 기존 내용과 비교해 어떤 특징이나 차별점이 있는지 알 수 있다.

  • Data : 풀고자 하는 문제

  • Model : 문제를 풀기 위한 방법

  • Loss function : Data와 Model이 정해져 있을 때, 이를 어떻게 학습할 지

    • MSE, Cross entropy, MLE
    • Loss function의 값이 줄어든다고 해도, 데이터의 특성이 고려되지 않으면 최선의 결과가 나온다는 보장은 없다(ex. noise가 있는 data에 MSE를 적용해서 학습해봤자 결과는 안 좋다)
    • 따라서, 각 Loss function을 이해하고 해당 Loss function을 사용할 이유를 잘 알고 있어야한다.
  • Optimization Algorithm

    • Gradient Descent, SGD 등등...
    • train data말고 test data에도 잘 동작하게 하는 기법들(Dropout, BN, Early stopping...)
  • Historical Review

    • 2012년 : AlexNet

      • CNN, ImageNet 대회에서 1등
    • 2013년 : DQN

      • 알파고를 만든 딥마인드가 강화학습을 하는 데 사용한 model
    • 2014년 : Encoder/Decoder, Adam

      • Encoder/Decoder : 기계어 번역 model
      • Adam : Optimizer의 종류, Computing power가 적어도 웬만하면 잘된다?
    • 2015년 : GAN, ResNet

      • GAN : Image를 만드는 model
      • ResNet : 네트워크를 깊게 쌓아도 성능이 잘 나오게 만들기 시작한 model
    • 2017년 : Transformer

      • Attention is all you need
    • 2018년 : BERT

      • fine-tuned NLP models
    • 2019년 : Big Language Model(GPT-X)

      • BERT의 끝판왕 같은 느낌
    • 2020년 : Self-Supervised learning

      • 학습데이터 뿐만 아니라, label을 모르는 data도 활용한다.
      • SimCLR

MLP(Multi-Layer Perceptron)

  • 현재의 딥러닝은 인간의 뇌를 모방했다고 하기엔 무리인 측면이 있고, 모델만 놓고 이게 왜 잘되는지 분석하는지가 중요하다.

  • Neural Network : 행렬곱과 activation같은 비선형화 연산이 반복적으로 일어나는 함수

  • Linear Neural Network : 공간상의 데이터 D를 가장 잘 표현할 수 있는 선 하나로 표현하는 것

    • Loss function : 1Ni=1N(yiy^i)2\frac{1}{N} \sum\limits_{i=1}^N(y_i-\hat y_i)^2
      • 실제 y값과 모델의 예측값 y^\hat y의 차이의 제곱이다 : 예측이 많이 빗나갈수록 loss를 더 크게 증가시켜 noise나 error를 더 잘 나타낼 수 있다.
      • L2-norm과는 다르다.(L2-norm은 루트를 씌움)
    • 성능을 높이고 싶으면 Loss function의 값을 최소화 해야한다 -> Loss function을 미분하여 - 시키는 back propagation 사용
      • loss function을 w에 대해 미분 -> (나온 결과값 * learning rate)를 w와 b에서 빼주면서 update.
      • 적절한 learning rate(step size)를 잡아줘야 학습이 된다.
  • w가 행렬이 됨으로서, n차원 input에서 m차원 output으로 만들 수 있다. (두 개의 vector space 사이의 변환)

  • 변환 과정에서 w가 여러개여도, 여러개의 w는 하나의 행렬로 정리가 되고, 이는 평범한 선형변환이다.
    -> Nonlinearity를 주기 위해 activation function등을 적용시킨다.

  • Activation function : ReLU, Sigmoid, Hyper tangent...

  • Loss function

    • 일반적으로 Regression task에 MSE를 쓰지만, 문제마다 항상 다르게 적용할 수 있다는 걸 고려해야 한다.
    • L2-norm과 L1-norm의 차이 : outliar나 error가 커졌을 때 가중치가 다름.
    • Classification에서는 보통 Cross entropy를 사용
      • 왜 잘될까? : CE는 여러 출력값 중 가장 큰 출력값만 키운다 -> 분류를 잘 한다는 관점에선 효율적이다.
      • 항상 새로운 문제에 대해 이 모델이 잘 될 지에 대해 고민해야한다.
    • Probability task : MLE

역전파, optimizer 정리

  • 만든 model에 batch_in(train_x) 를 넣어서 나온 y^ 과, batch_in의 실제 y값을 구할 수 있다.
  • 이 둘 간의 loss를 loss function에 값을 넣어 구한다.
  • 예를 들어 linear neural network의 경우, y^ = wx + b로 정의할 수 있다.
    이 때, x는 고정되어 있고, y^을 y에 가깝게 조정해야 하므로, 조절할 수 있는 값은 w와 b다.
    따라서, loss function을 w와 b에 각각 미분한 식(lossw,lossb\frac{\partial loss}{\partial w}, \frac{\partial loss}{\partial b})을 구한 후, 그 식에 y와 y^\hat y을 넣어 각각 w, b에 대한 gradient를 구할 수 있다.
    이를 현재 w, b에서 뺌으로서 갱신한다. 이를 통해 갱신된 w,b로부터 구한 y^\hat y이 y와 좀 더 가까워지도록 하는 것.
  • 정확히는, 갱신할 때, 좀 더 학습이 잘되게 하기 위해 단순히 미분값을 빼는게 아니라, 학습률을 조절하거나 하는 식의 다양한 방법을 사용한다. 이걸 최적화(Optimizer)라 한다. ex) SGD, Adam

피어 세션

  • 팀원분이 CNN에 대한 설명을 ppt로 준비해오셨다. 내가 알고 있는 CNN의 개념과 핵심을 다 설명해주셔서 내가 가진 개념을 정리하는 데 도움이 됐고, 다른 팀원들도 도움이 많이 된 것 같아 감사하다.

  • 수요일까지 MDN(Mixture Density Network), 목요일까지 AlexNet을 조사해 발표하기로 했다.

  • 피어 세션 때 시간이 남을 경우 알고리즘 문제를 풀자는 의견이 나와, 평소에 알고리즘 문제 찾아보며 풀만한 문제를 찾아놔야겠다.

공부가 더 필요한 부분

  • 오늘은 딱히 없다(gradient를 구할 때 왜 편미분을 w에 대해 하는 지 궁금했는데, 오늘 공부하면서 이해해서 학습 내용 란에 서술해 놓았다).

느낀 점

  • 과제하면서, Pytorch를 처음 보다보니 익숙하지 않다. 크게 어려운 내용은 없지만 매일 과제를 하면서 익숙해져야겠다.

  • 이제 한 주 지났는데, 짧은 시간이지만 뭔가 많이 머리에 넣은 느낌이 든다. 지난 주에 비해 집중력이 조금 떨어지는 것 같은데, 그 날 그 날 공부할 내용을 미리 정해두고 목표한 만큼은 반드시 해내는 식으로 하면 이번 한 주도 괜찮을 것 같다.

0개의 댓글