이제 앞으로 어떻게 더 지식을 습득할 수 있는지,,

어떻게 머릿속을 꽉 채울 수 있을지 설명해주시는 것을 정리해본댜

 

  • 블로그, 뉴스 - 같은 키워드로 5개 정도의 블로그를 보고 대략적으로 파악함
  • 논문 리뷰 영상 - 유튜브를 참고하여 다양한 기술을 대략적으로 알고 있다가, 실제 필요할 때 깊게 공부함
  • 논문 검색 - Google, Google Scholar, Arvix 등
  • 논문 인용 참조, 서베이 논문을 보는 것도 도움이 됨
  • Github
  • Kaggle

 

필요 역량

  • 딥러닝의 기본 지식 및 용어가 필요함(선행지식이 없으면 이해하기 어려움)
  • 영어(많은 논문들이 영어로 작성되어 있음, 영어로 검색하는 것과 한국어로 검색하는 것과 차이가 큼)

 

딥러닝 개념 잡기 완강(이미지 처리 기술 제외)!!!!!!!

완강했으나, 아직 완벽하게 이해하지 못했고 내 것으로 만들지 못해서 복습은 필수인 것 같다ㅠㅠ!

생애 최초 인강 완강한 나자신 칭찬한다!ㅠㅠ

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

설명 가능한 AI는 무엇인지 알아보자!

딥러닝 모델은 내부적으로 어떻게 계산이 되는지 알아보기 쉽지 않고, 어떤 근거에 의해서 결과를 산출했는지 알기 어렵다.

XAI 중요성

  • 결과 분석 용이
  • 시각적 이해도 향상
  • 모델 내부에 대한 이해도 향상

 

이미지 분야의 XAI

  • Class Activation Map(CAM)
    • 모델이 이미지를 분류하는데 이미지에서 어떤 부분을 가장 많이 받는지 시각화해줌
  • Attention
    • 이미지 안에서 어느 부분이 제일 두드러지는 가중치를 가지고 있는지 시각화해줌
    • 이미지뿐만 아니라 시계열, 언어 분석에서도 사용 가능
  • Activation Maxmization
    • 특정 피쳐맵이 발현되려면 어떤 이미지가 들어왔을 때 가장 크게 발현되는지 시각화해줌

 

 

이번 강의에서는 이미지에서 처리 가능한 기술을 주로 설명해줘서 일단 패스!!

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

준지도 학습과 비지도 학습에 대해 알아보자

학습 방법의 종류

  • 지도 학습(supervised learning)
    • 정답을 알려주며 학습시키는 방법
    • 라벨을 이용하여 정답을 맞혀가며 학습하는 방법
    • 예) Classification, Regression
    • 장점 : 높은 정확도(모델이 예측한 값이 비슷한지 아닌지 판단할 수 있기 때문), 학습 데이터에 대한 정확한 학습
    • 단점 : 라벨이 필요, 라벨링 오류의 위험 
    • 직관적인 메카니즘을 가지고 있어서 많이 사용됨
  • 준지도 학습(semi-supervised learning)
    • 라벨이 없는 데이터와 라벨이 있는 데이터를 모두 학습에 사용
    • 예) PseudoLabel
    • 장점 : 더 많은 데이터의 확보(사람이 직접하지 라벨링 하지 않기 때문에 빠름), 지도 학습 효과
    • 단점 : 라벨링의 불확실성(모델이 학습을 잘 못한 상태에서 PseudoLabel을 적용할 경우, 라벨이 틀린 경우가 많아짐)
    • 기본적인 메카니즘은 지도 학습
    • 라벨이 없는 데이터(실제값이 없음)는 PseudoLabel 방법을 사용해서 실제 값을 생성함
    • PseudoLabel 방법은 모델에 라벨링 없는 데이터가 들어갈 경우 나온 예측값을 라벨링으로 사용하도록 함
    • 즉, 모델한테 라벨링을 맡기는 것
    • 실제값이 있는 데이터의 경우, 출력 값과 실제값을 비교하고
    • 실제값이 없는 데이터의 경우, Pseudo 라벨 값을 비교함
    • 초기에 모델을 잘 구축해뒀을 경우, PseudoLabel이 꽤 괜찮은 라벨링을 해줌
  • 비지도 학습(unsupervised learning)
    • 정답을 알려주지 않고 학습을 시키는 방법
    • 라벨 없이 데이터의 특성을 파악하는 학습 방법
    • 예) Clustering, Generative models - GAN, Autoencoder
    • 장점 : 라벨 불필요
    • 단점 : 상대적으로 낮은 정확도(모델한테 데이터의 특성을 알아서 파악하라고 하기 때문에 컨트롤하기 힘듦)
    • 일반적으로 지도 학습보다는 정확도가 낮음
    • 라벨이 불필요하기 때문에 더 많은 데이터를 사용할 수 있음
  • 강화 학습(reinforcement learning)
    • 주위 환경으로부터 정보를 받아들여 학습을 하는 방법

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

전이 학습이 뭔지 잘 모르겠으니,,,, 공부해보쟈

전이 학습은 연구에서 가장 중요한 부분이라고 한다..

전이 학습이란?

  • 기존에 알고 있는 다른 지식(source domain)을 통해 새로운 문제(target domain)를 해결하는 학습 방법
  • 전이 학습을 통해서 더 많은 지식을 얻음으로써 성능도 향상시키고 학습 속도도 빠르게 만들 수 있음
  • 성능을 향상시키려면 기본적으로 데이터가 많아야 함
  • 데이터 부족을 극복하기 위해 다른 지식 데이터를 가져옴
  • 학습된 다른 데이터를 가져올 수도 있고, 학습된 다른 모델을 가져올 수도 있음

 

전이 학습 장점

  • 보다 적은 데이터 양으로 성능 개선 가능
    •  적은 우리 데이터 + 많은 소스 데이터
  • 학습 시간 절약

 

전이 학습 종류

  1. Instances-based
    • 적절한 가중치를 이용한 소스 도메인을 활용
    • Instance라고 하면 데이터 하나하나를 말함
    • 소스 도메인에서 타겟도메인과 유사한 데이터를 끌어와서 사용함
    • 소스 도메인에서 데이터를 가져올 경우 데이터 분포 간의 차이가 있기 때문에 소스 도메인에 적절한 가중치를 적용해서 사용함
  2. Mapping-based
    • 두 도메인의 유사성을 이용하여 새로운 데이터를 생성
    • 소스 도메인과 타겟 도메인의 성질의 공통점을 가진 공간을 만들어서 그 데이터 셋으로 모델을 학습 시킴
    • 맵핑 방법 예) cycleGAN
  3. Network-based
    • 소스 도메인의 사전 학습된 모델을 사용
    • 전이 학습에서 가장 많이 사용되는 방법
    • 파이토치에서 Pretrained라는 이름으로 모델을 공유함
  4. Adversarial-based
    • Adversarial Layer를 통해 도메인 라벨을 생성하고 적대적 네트워크가 도메인을 잘 구분하지 못하는 방향으로 학습하여 다른 도메인으로부터 오는 피쳐맵의 차이를 적게 함
    • Adversarial Layer를 만들어서 도메인을 구분할 수 있는 장치를 하나 만듦
    • 모델에 소스 도메인 데이터와 타겟 도메인 데이터가 들어오는데 데이터 분포가 다르다 보니까 소스 도메인으로부터 Pretrained된 모델을 가져와서 타겟 도메인에 적용을 시키면 학습이 잘 되지 않을 수 있음
    • 소스 도메인과 타겟 도메인의 차이를 모델이 구분을 하지 못하게 하기 위해 도메인 라벨을 만들어서 같이 loss를 고려함

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

이번에는 모델 튜닝에 대하여 알아보자

모델의 성능이 좋지 않으면 다른 모델을 써도 된다.

하지만, 모델이 확정이 되었고 모델 자체를 튜닝하는데 어떤 것들이 필요한지에 대해 알아본다.

  1. ⭐️모델의 구조 변경 - 레이어 수 / 필터 수 / pooling / filter 크기
    • 일반적으로 인공 신경망이 깊으면 깊을수록 성능이 좋다고 함
    • 하지만 파라미터 수가 늘어나면서 학습이 느려지고, overfitting이 될 수도 있음
    • 학습을 돌리게 되면 accuracy 그래프나 loss 그래프 결과를 보고 잘 생각해서 변경해야 함
  2. ⭐️input의 크기 - 이미지 크기 / 시퀀스 길이
    • 이미지 처리 모델 중 EfficientNet : 레이어 수, 필터 수, 이미지 크기를 자동으로 조절해서 최적의 개수를 구해주는 모델
  3. 학습 반복 수(epoch) / 배치(batch) 수
    • 과적합일 경우 Early stopping을 이용할 수도 있는 거고, 반복 수를 늘려서 경황을 지켜볼 수도 있음
    • 일반적으로 배치 수가 많으면(즉, 한번 학습 할 때 많은 배치가 들어오면) 학습이 잘되는 것으로 알려져 있음
    • 다만, 배치 수를 마냥 늘리게 되면 overfitting의 영향이 있을 수 있고, 메모리에 문제가 생길 수도 있음
  4. 최적화 알고리즘(optimizer) / 학습률(learning rate)
    • loss 그래프나 accuracy 그래프를 보고 너무 천천히 떨어지는 것 같으면 학습률을 조금 더 높여주면 됨
    • 갑자기 변동이 생기거나 잘 안내려 갈 경우 학습률을 낮춰주면 됨
    • 최적화 알고리즘은 보통 Adam 사용
    • SGD, momentom + 스케줄링을 사용하기도 함 
  5. 과적합인 경우, 정규화 적용(드롭아웃, L2 정규화 등)
    • 과적합인 경우 : 예를 들어, train accuracy가 92% 인데 test accuracy가 50%이면 과적합이라고 볼 수 있음
    • 과적합을 방지하기 위해 정규화를 적용함
    • 드롭아웃을 0.5비율로 했을 때 정규화 영향이 별로 없다 싶으면, 0.7 ~ 0.8까지도 올려줄 수 있음
    • 드롭아웃은 output layer에는 절대 사용하면 안 됨
    • 일반적으로 L2 정규화를 많이 사용하는 것 같음
    • L2 정규화를 통해서 페널티 파라미터를 조절하면 됨
    • 페널티가 커지면 커질 수록 정규화의 영향이 커짐
    • 패널티가 너무 커지면 학습이 정상적으로 되지 않을 가능성이 있음
    • 배치 정규화는 정규화 효과가 매우 좋아서 기본적인 모델에 다 들어가 있음
    • 안 들어가 있을 경우 배치 정규화를 사용해보길 추천
  6. ⭐️데이터 증식
    • 과적합도 방지해주지만, 데이터를 확장시켜주기 때문에 정확도를 높여줌
    • GAN, 명암조절, 대칭 이동 등으로 데이터 증식
  7. 손실 함수
    • 모델 구조에 따라서 적절한 손실 함수를 사용해야 함
    • 과적합일 경우 weighted loss function을 사용할 수도 있음
  8. 활성화 함수
    • 기본적으로 ReLU를 사용함
    • ReLU를 변형한 다른 활성화 함수를 사용했을 때 성능이 좋아질 수도 있음
  9. 샘플링 방법(undersampling, weighted sampling 등)
    • 직접적인 모델 튜닝 방법은 아니지만, 모델에 데이터를 어떻게 주입시키냐에 따른 것
    • 어떤 데이터가 어떤 식으로 들어왔는지가 중요
    • 샘플링을 할 때 배치수를 적절하게 해야 함
  10. ⭐️초기 모델 파라미터(initial parameters)
    • gradient descent의 기본적인 관점은 local min과 global min을 구분하지 못한다는 것(어디서 시작하냐에 따라서 각각의 종착지가 다르다는 것)
    • 그래서 초기 모델 파라미터를 임의로 세팅할 수도 있고, 좋은 모델로부터 학습된 파라메타를 받아와서 시작하는 방법이 있음
    • 좋은 모델로부터 학습된 파라메타를 받아와서 시작하는 방법을 pretrained 한다고 함

 

위 10가지도 중요하지만, 구글링해서 다른 사람들이 어떻게 했는지 많이 찾아보고, 논문을 많이 읽을수록 잘할 수 있어지는 것이다.

명심!

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

데이터 불균형이 무언인지 알아보쟈

데이터 불균형이란?

  • 데이터 세트 내의 클래스의 분포가 불균형한 것을 의미함
  • 데이터 불균형이 있을 경우 비교적 많이 있는 데이터에 대해 overfitting이 일어날 수 있음
  • 전체적인 모델 성능에 좋지 않은 영향을 미침

 

불균형 데이터 종류

  • 정상 거래 vs 사기 거래(정상 거래 > 사기 거래)
  • 기체 결함(정상 기체 > 문제 기체)
  • 높은 클릭률(유튜브 동영상 클릭률)
  • 희귀 질병 vs 질병(질병 > 희귀 질병)

 

불균형 데이터 해결

  1. 데이터 증식 - 모자란 데이터 수집 및 임의 생성(평행 이동, 대칭 이동, GAN 등을 이용)
  2. 샘플링 기법
    • under sampling - 적은 수의 데이터를 기준으로 데이터 개수를 맞춤
    • over sampling - 기존에 많았던 데이터를 기준으로 데이터 증식을 통해 모자란 데이터를 채워 넣어 기존 데이터를 다 사용함
    • under sampling + over sampling 해도 됨
    • weighted random sampling - 미니 배치를 기준으로 기존 데이터에서 밸런스하게 뽑아서 넣어줌, 예를 들어 미니배치 사이즈가 30일 경우, 각각의 데이터에서 10개씩 뽑아서 데이터를 만듦, 파이토치에서 기본적으로 제공해줌
  3. 가중 손실 함수 - Loss function에서 라벨이 많은 경우 가중치를 적게 줌
    • 라벨별로 데이터가 10, 50, 40개 존재할 경우
    • 가중치를 1/10, 1/50, 1/40을 줄 수도 있고
    • 100/10, 100/50, 100/40을 줄 수도 있음
    • 파이토치에서 기본으로 제공해주기 때문에 weight값만 정해주면 됨
  4. 평가 기준 정의
    • accuracy : 전체 / 맞춘 수
    • accuracy가 90% 일 때 좋은 모델이라고 할 수 있을까?
    • 아니다. 불균형한 데이터에서 가장 많은 데이터를 잘 맞추는 것일 수 있음
    • 각각 라벨마다 따로 봐줘야 함
    • 여러 가지 평가 기준이 있으니 참고해서 진행해야 함

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

호로록 빨리 지식을 머리에 마구마구 집어 넣어보쟈

딥러닝을 포함한 머신러닝 분야에서 중요한 과적합에 대해서 알아보쟈

과적합이란?

  • 맨 왼쪽 그래프에서는 우리가 알고자 하는 값을 전혀 예측하지 못함 - 과소적합
  • 가운데 그래프는 학습 데이터로 학습 후 예측 값이 잘 되고 있음 - 적정, 좋은 모델
  • 학습 데이터로 학습을 했는데, 학습을 너무 잘해서 학습 데이터에 너무 잘 맞춰진 예측식을 만들다 보니까 학습 데이터가 보지 못한 시험 데이터에 대해서는 제대로 예측하지 못하는 경우가 있음 - 과적합

 

과적합 해결

  • 학습 데이터를 많이 확보
    • 학습 데이터 생성에는 돈과 시간이 많이 들어가기 때문에 학습 데이터를 많이 만드는데 어려움이 있을 수 있음
    • 그래서 학습 데이터를 확보하기 위해 아래와 같은 방법을 사용함
      1. 데이터 증식(Data Augmentation)
        • 기존 데이터 10개를 가지고 평행이동이나 대칭 이동을 해서 새로운 데이터 10개를 생성함
        • 그래서 훈련 시 기존 데이터 10개와 새로 생성한 데이터 10개를 합친 20개를 사용함
      2. 조기 종료(Early Stopping)
        • 학습을 하면 입력 값을 모델에 넣고 출력 값을 뽑아내고, 뽑아낸 예측 값을 실제 값과 비교를 해서 Loss를 계산해서 최적화를 진행함
        • 학습 반복 횟수가 늘어날수록 기존에 있던 학습 데이터를 맞출 확률이 높아짐
        • 기존에 있던 학습 데이터는 잘 배워지기 때문에 Loss가 작아짐
        • 시험 데이터는 학습에는 관여하지 않고 평가하는데 쓰이기 때문에 잘 맞추다가 과적합이 있다면 학습 반복 횟수가 늘어날 수록 Loss가 높아짐
        • 조기 종료 시점을 확인하여 과적합을 방지함
        • 굴곡이 2개가 생길 수도 있기 때문에 학습 반복 횟수인 epoch를 크게 해서 어떻게 그래프가 나오는지 확인해야 함
      3. L1, L2 정규화(L1, L2 Regularization)
        • Loss function에서 가장 아랫부분인 w*까지 간다면 train data에 최적화가 되었다는 것을 알 수 있음
        • 최소점까지 가지 못하게 방해물을 줌
        • 바운더리 경계를 만들어서 그 안에서만 처리하도록 함
        • Loss function 뒤에 정규화 텀(바운더리)을 붙여줌
        • L1 : 절댓값 미분이기 때문에 V 형태의 그래프, 0 기준 왼쪽은 -1, 0기준 오른쪽은 1 , 0 기준에서는 subgradient를 이용하면 됨
        • L2 : weight decay라고도 함
      4. 드롭아웃(Dropout)
        • 계산할 때 랜덤으로 노드를 제거하여 계산을 하지 못하도록 하는 방법
        • 들어오는 값에 0을 곱해서 노드를 없애는 것처럼 함
      5. 드롭커넥트(DropConnect)
        • 드롭아웃은 노드를 없애는 반면, 드롭커넥트는 일부 가중치를 0으로 만드는 것
      6. 교란라벨(DisturbLabel)
        • 과적합을 방지하기 위해 일부 실제 값을 틀린 라벨로 바꿔치기하는 것
      7. 배치 정규화(Batch Normalization)
        • 층과 층 사이에 배치 정규화를 넣어줌으로써 과적합을 해결함
        • 데이터에 대해서 항상 같은 분포에서 계산이 되도록 해줌
        • 각 배치마다 정규화된 정도가 다를 수 있어서, 감마와 베타를 곱하고 더해서 shift를 해줌
      8. 라벨 스무딩(Label Smoothing)
        • Loss를 계산할 때 어떤 특정 비율로 실제 값을 조정해주는 것
      9. 노이즈 주입(Noise Injection)
        • 입력값 자체나 레이어 중간의 임의의 노이즈를 주입
        • train data 자체에 노이즈를 추가함
        • 계산 과정에 노이즈를 추가함
      10. 교차 검증(Cross Validation)
        • 과적합을 직접적으로 해결하는 방법은 아님
        • 과적합이 됐는지 안됐는지 판단하는 척도
        • Train data, Validataion data, Test data로 나눔
        • Test data는 오로지 검증할 때만 사용함
        • 교차 검증은 Train data를 kfold 한 후 순차적으로 Validation data를 두는 것
        • 위 이미지는 3fold 예시
        • 예를 들어, 5fold일 경우 TTTTV, TTTVT, TTVTT, TVTTT, VTTTT 이런 식으로 할 수 있음
        • 단점 : 평균 loss 또는 평균 accuracy로 모델을 판단하기 때문에, k가 3일 경우 3번을 학습시켜야 하기 때문에 시간이 오래 걸린다는 단점이 있음

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

새로운 유형의 인공신경망인 오토 인코더란 무엇인지 알아보자!

오토인코더(Autoencoder)

  • 입력층과 출력층의 크기가 같은 형태(기본적인 형태)
  • Encoder, Decoder로 나눠짐
  • Latent Variables 기준으로 왼쪽을 보면 변수를 통해 특징이 추려지면서 중요한 값들로 압축이 됨 = Encoder
  • 압축된 정보를 펼쳐서 원래 입력층과 유사한 값을 만들어냄 = Decoder

 

오토 인코더 특징

  • 비지도 학습(unsupervised learning) : 실제 값이 없을 때 할 수 있는 학습 방법
    • 지도 학습에서는 input값이 hidden state를 통해서 output이 나오는데, 이 output값을 실제 y값과 비교하여 Loss 값을 추출함
    • 지도학습에서는 y값이 반드시 필요함
  • 차원 축소 가능
    • Encoder 부분을 보면 차원 축소를 할 수 있음
    • PCA, clustering, Autoencoder를 통해서 차원 축소 가능
  • 추가적인 이미지 생성 가능
    • 이미지 뿐만 아니라 추가적인 변수 생성 가능
    • 데이터가 모자를 경우에 오토인코더를 사용해서 데이터를 늘릴 수 있음
  • 일반적으로 대칭 구조를 지님
    • Encoder 부분과 Decoder 부분

 

학습 방법

  • MSE를 사용해서 X값과 X' 값의 차이를 Loss function으로 정의해 줌
  • y 값이 없기 때문에 y에 대한 지도학습 방법은 아님
  • X와 X'의 차이가 작은 파라미터 값들을 업데이트 시켜줌
  • 가중치 매트릭스 A, B, C, D
  • A = 5 * 7
  • B = 3 * 5
  • C = 5 * 3
  • D = 7 * 5
  • 업데이트해야 할 변수의 개수 = 35 + 15 + 15 + 35 = 100
  • 변수를 줄여주기 위해 C = B𝑇 , D = A𝑇  로 사용하는 경우도 있음 -> 이럴 경우 A와 B만 업데이트해도 C와 D도 업데이트됨
  • 그래서 업데이트할 변수가 100개에서 50개로 줄어듦

 

오토 인코더의 종류

  1. Stacked Autoencoder(기본구조 - 여러 개의 은닉층 존재)
    • 단점 : X와 X'로 Loss function을 정의해서 Loss를 작게 하는 가중치를 업데이트해줘야 하는데 Loss를 작게 해 주도록 업데이트하다 보면 X와 X'가 같은 값이 나올 수 있음 -> 그럼 Autoencoder를 사용하는 의미가 없음, 입력층의 값을 사용하지 왜 출력층의 값을 사용하니?
    • Loss가 작아진다는 의미는? X와 X'가 같아야 한다는 소리
    • 우리는 X라는 속성을 가진 X'를 얻고 싶은 것임
    • 가깝지만 똑같지는 않고, 매우 유사한 X'를 얻고 싶음
  2. Denoising Autoencoder
    • X라는 속성을 가진 X'를 얻고 싶어서 나온 것
    • Autoencoder를 할 때 입력층 바로 다음에 노이즈를 주입함
    • X에 대한 계산이 아닌 X + ε를 계산함
    • 또는 입력층 바로 다음에 드랍아웃이라는 것을 사용해서 랜덤 한 일부 노드를 없애고 진행함
  3. Sparse Autoencoder
    • X와 X'가 같게 나오면 모델이 의미가 없기 때문에 나옴
    • X와 X'를 유사하게 만들기 위해 Loss function에  제약조건을 줘서 한없이 작아지지는 않게 함
    • h = f(x), X' = g(h) => X' = g(f(x))
  4. Convolutional Autoencoder
    • 말 그대로 CNN이 적용된 것
    • Encoder와 Decoder는 모두 Convolutional Layer 형태로 채널들이 여러 개 있음
    • h는 Convolutional 형태나 Linear 형태로 할 수 있음
    • 1열 형태의 Layer를 사용하는 것이 아닌 Convolutional Layer를 사용하는 것

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

순환 신경망의 다양한 형태들을 알아보쟈

Vanilla RNN

  • 이전 hidden state 정보를 받아서 현재 input 값과 계산을 한 뒤에, Tanh라는 activation function을 거쳐서 현재의 hidden statef를 만들어냄
  • 이와 같은 방식을 사용하다 보면 '기울기 사라짐' 문제가 발생함

 

Vanilla RNN의 문제점

  • '기울기 사라짐' 문제는 값이 조금만 커지거나 조금만 작아져도 미분 값이 0이 돼버리는 것
  • '장기 의존성' 문제는 앞쪽의 hidden state 정보들이 뒷 쪽에 있는 hidden state까지 얼마나 전달이 될까? 라는 의문에서 생겨난 문제

 

LSTM(Long Short-Term Memory models)

  • RNN의 '기울기 사라짐' 문제와 '장기 의존성' 문제를 보완하기 위해 나온 모델
  • h값 만 받는 것이 아닌 s라는 gate를 만들어서 문제를 해결함
  • 이전 정보를 얼마나 기억할지, 현재 정보를 얼마나 기억할지 구조를 만든 것
  • 이전 정보가 덜 중요하다 싶으면 조금만 기억하고, 이전 정보가 중요한 것이면 많이 기억하는 식으로 동작함
  • f : forget gate, i : input gate, o : output gate
  • sell state, hidden state를 가지고 다음 계산에 반영시킴
  • 장점 : 기존 RNN보다 좋은 성능을 가짐
  • 단점 : 오래 걸림
  • sigmoid : 항상 0과 1 사이의 값을 가져옴

 

GRU(Gated Recurrent Unit)

  • LSTM 계산이 너무 복잡하니까, 계산을 줄여보자 해서 나온 모델
  • r(t)가 0에 가까우면 이전 내용을 거의 반영하지 않겠다는 의미
  • r(t)가 1에 가까우면 이전 내용을 많이 반영하겠다는 의미
  • 다음으로 넘겨줄 h(t)를 만들 때는, 이전 정보를 살려서 더해주는 형태
  • u(t)가 0에 가까우면 이전 정보는 조금, 현재 정보는 많이 반영하겠다는 의미
  • u(t)가 1에 가까우면 이전 정보를 많이, 현재 정보를 조금 반영하겠다는 의미

 

RNN, LSTM, GRU의 근본적인 단점

  • many to many 번역 문제에서
  • 기본적인 RNN 형태에서는 출력 길이를 조절할 수는 있지만 들어오는 문장마다 가변적일 수는 없음
  • 순서를 고려하기 쉽지 않음
  • 이런 문제를 해결하기 위해 seq2seq(sequence-to-sequence)가 나옴

 

seq2seq(sequence-to-sequence)

  • LSTM 모델 두 개를 붙임
  • 앞에 붙은 LSTM 모델을 Encoder라고 하고, 뒤에 붙은 LSTM 모델을 Decoder라고 함
  • 입력 값에 대해 LSTM 모델을 통해서 분석을 한 뒤 거기에 대표되는 Context vector를 하나 만듦
  • Context vector 정보를 뒤에 붙은 LSTM 모델로 보내서 처리함
  • 이렇게 처리하기 때문에 input sequence의 개수와 output sequence의 개수가 달라도 상관없어짐(출력 길이에 구애받지 않음)
  • context vector를 받아서 처리하기 때문에 input vector의 순서가 중요하지 않음
  • 단점 : 어순을 판단하기 어려움

 

Attention Mechanism

  • seq2seq의 어순을 판단하기 어려운 문제점을 해결하기 위해 나옴
  • 어순 차이를 극복함
  • RNN 연산을 할 때 연산된 각각의 hidden state를 가지고 각각에 가중치를 구해서 hidden state각각에 가중치를 곱해서 더한 값을 context vector로 넘겨줌
  • RNN의 고질적인 문제는 현재 정보가 과거의 정보에 영향을 미치지 않는다는 것
  • 한 단어 한단어가 번역될 때마다 전체적인 문장에서 가중치를 구함으로서 어순과 상관없이 전체적인 문장을 고려할 수 있음

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

저녁 운동도 부셨으니, 순환 신경망을 공부해보쟈

 

순환 신경망의 활용 - 시계열 데이터에 많이 사용됨

  1. 언어 번역
  2. 신호 처리
  3. 주가 예측
  4. 음성 인식

 

일반적인 인공신경망

  • input 하나가 모델로 들어오게 되면, 모델이 예측 값을 하나 산출
  • 각각의 input 마다 output을 산출

 

순환 신경망

  • input x1이 들어가면 output y1을 산출하는데, 모델에 정보 h1를 저장함
  • 두 번째 input  x2가 들어가면 모델에 저장한 정보 h1과 같이 계산을 해서 output y2를 산출함

 

RNN(Recurrent Neural Network)

  1. one to many - x가 들어가서 여러 개의 output을 만드는 것
    • 예를 들어, 작곡 프로그램의 경우 장르가 들어오면 여러 개의 음정을 뽑아냄
  2. many to one - 여러개의 데이터를 가지고 하나의 ouput을 산출함
    • 예를 들어, 주가 예측을 하는 경우, 12/1, 12/2, 12/3, 12/4 일의 데이터가 들어갔을 때
    • 12/1의 데이터와 h1(정보)을 이용해서 h2를 만들고
    • 12/2의 데이터와 h2를 이용해서 h3를 만드는 형식으로 감
    • h1, h2, h3, h4와 같은 hidden layer를 sequence라고 부르며, sequence의 길이를 자유롭게 조절할 수 있음
    • 주가 예측할 때, 10일 치를 볼지, 100일 치를 볼지 조절하는 것이 sequence 길이 조정이라고 보면 됨
  3. many to mant - 여러 개의 input과 여러 개의 output을 만듦
    • [i][don't][like][pizza] -> one hot encoding으로 변경하여 넣어줌

 

Vanilla RNN

  • 일반적으로 h0 은 영 벡터(0,0,0,...,0,0)로 정의함 
  • h => 이전에 있던 hidden state 정보와 현재의 정보를 받아서 현재의 상태를 저장
  • o => linear한 인공신경망
  • y => 인공신경망에 softmax를 씌워서 output 산출

 

  • h함수는 위 이미지처럼 동작함
  • 이전 state인 h(t-1)을 받아서 x(t)와 만나서 연산이 된 것이 a(t)
  • a(t)가 activate function인 Tanh를 거쳐서 h(t)를 만듦
  • many to many이면 x(t)를 받으면 y^(y_hat)을 만들고
  • 그게 아니면 h(t)를 다음으로 넘겨주면 됨

 

RNN의 손실 함수

  • Cross-Entropy : classification 문제에서 많이 사용됨
  • MSE : Regression 문제에서 많이 사용됨
  • Loss가 가장 작게 나오는 가중치를 구해주면 됨
  • 가중치 : W, U, V, c

 

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

+ Recent posts