본문 바로가기

Upstage AI Lab 2기

Upstage AI Lab 2기 [Day057] CH.4 - CNN, RNN, From AlexNet to ChatGPT

Upstage AI Lab 2기

2024년 3월 5일 (화) Day_057

온라인강의

 

업스테이지 AI

 

나머지 공부


CH. 4-1. CNN (Convolutional Neural Network)

MLP의 한계점 : flatten 하면서 이미지 데이터의 형상 정보가 사라짐

상대적 위치에 대한 정보가 사라지고, 인접 픽셀간 유사성에 대한 정보가 사라짐

앞단은 convolution을 사용하고, 어느 정도 추상적으로 특징이 잘 뽑혔다고 판단 되면 그 뒤부터는 일렬로 정렬해서 사용함.

 

convolution 연산

Filter/Kernel - Kernel을 구성하는 숫자가 모델이 학습해야할 파라미터

입력 데이터보다 출력 데이터의 크기가 작아짐

입력데이터 x 커널(element-wise product) -> feature map

 

hyperparam : kernel size, stride, padding,

이미지는 RGB -> 3 channels!!!

channel수는 정해져 있고, 커널의 채널도 인풋의 채널과 맞춰줌

(커널이 3차원이 됨)

but output channel은 1

 

 

3차원 필터를 FN개 사용하고 싶다면?

입력 (C, H, W) ⓧ 필터(FN, C, FH, FW) -> 출력(FN, OH, OW)

 

pooling - max pooling / average pooling

풀링은 학습의 대상이 아니다!!

- 효율적으로 데이터 크기를 줄일 수 있음

- 노이즈에 대해 robust함

 

꼭 해보기!

https://cs.stanford.edu/people/karpathy/convnetjs/demo/mnist.html

https://transcranial.github.io/keras-js/#/mnist-cnn

https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html

 


CH. 4-2. RNN (Recurrent Neural Network)

자연어처리에 많이 사용됨.

특히 transformer model이 rnn에서 발전됨

입력데이터의 크기가 고정되지 않았을 경우 CNN을 쓰기가 어려움

 

이미지데이터 처리시에는 resize처리를 해줌 (학습시 이미지 크기를 기준으로)

 

but 텍스트는 이렇게 처리가 안됨

텍스트 -> sequential data

 

순차적으로 인풋을 넣어줄 때, 모델 파라미터에 이전 데이터의 상태에 대한 정보가 저장되어 있음

상태 정보를 저장해둔다는 의미

 

핵심 : 이전 시점의 정보를 현재 인풋과 같이 처리할 수 있어야 함

기억하는 역할 : 은닉층 (인풋이 추가됨에 따라 업데이트 됨)

 

one-to-many : 예) image captioning

many-to-one : 예) sentiment analysis

many-to-many : 예) machine translation, video scene classification

 

입력이든 출력이든 many가 들어오게 됨, 이것을 처리할 수 있는 구조여야 함.

RNN에서는 arc tangent가 좋더라!라고 제안

 

critical한 문제점!!!

one-to-one에서도 backprop시 vanishing gradient problem이 있었는데, 

rnn에서는 시간에 대해서도 누적되는 효과가 있어서 출력층과 먼 정보에 대한 파라미터 업데이트가 잘 안됨

-> Long-term dependency


Long-term dependency를 해결하기 위해

1. LSTM (Long Short-Term Memory)

2. GRU (Gated Recurrent Unit)


1. LSTM (Long Short-Term Memory)

3가지 gate : Forget gate, Input Gate, Output Gate

 

2. GRU (Gated Recurrent Unit)

LSTM을 단순화

2가지 gate : reset gate, update gate

update gate - LSTM의 Forget gate, Input Gate 합친것과 유사함

 

 

추가로 읽을 거리

https://karpathy.github.io/2015/05/21/rnn-effectiveness/

- rnn이 시계열 데이터를 다루긴 하지만, 이미지를 시계열 데이터처럼 바꿔서 이미지 인식에도 사용 가능함

https://en.wikipedia.org/wiki/Recurrent_neural_network

 


CH. 4-3. From AlexNet to ChatGPT

LeNet-5 (1998) - CNN구조를 처음 제안

 

 

AlexNet (2012) -  딥러닝의 시초

ImageNet dataset - ILSVRC 2010-2017

AlexNet을 기점으로 top 1 accuracy 급상승

AlexNet 이전은 전통적 기법으로 봄, AlexNet 이후 딥러닝 기반 모델이라고 봄

 

 

인식 TASK

VGG (2014)

3x3 필터로만 구성!

이전 : 초반에는 필터 크기가 큰게 좋다고 알려져 있었는데

3x3 필터를 여러겹 쌓는 방식으로

더 적은 파라미터로 더 큰 필터를 쓰는 효과를 냄

 

GoogLeNet(2015)

inception module을 제안

1x1, 3x3, 5x5 필터를 쓴 결과를 합

 

ResNet(2015)

핵심 아이디어는 대표적인 모델들에서 지금도 사용되고 있음

Transformer에도 적용되어 있음

기대하는 바 : 레이어가 클 수록 training/test 에러가 낮기를 기대함

-> degradation problem

이것은, 즉, 모델의 구조적으로 근원적인 문제가 있다!!

 

기존 방식에 highway를 추가함 - F(x) + x를 학습해야하는게 아니라 bypass를 뚫어줌으로써 F(x)에 대해서만 학습하면 됨

residual만 익히면 된다

residual connection

-> 152개 레이어

but 과적합은 일어나지 않고, 사람보다 정확도가 높아짐

 

 


생성 TASK

GAN(Generative Adversarial Networks, 2014)

새로운 방식으로 모델을 학습시킴

학습시 Generator와 Discriminator를 같이 학습시킴

(서비스 단에서는 Generator 를 서비스 함)

비유 : G는 위조지폐(Fake)를 생성, D는 fake와 real을 감별

D의 성능이 올라가면, D를 속이기 위해서 G의 성능도 향상 됨

목표 : D가 구별하기 어려운 real같은 fake를 만드는 것

 


text domain

 

Sequence-to-Sequence (Seq2Seq, 2014)

시퀀스 투 시퀀스 형태로 전체 구조를 엮어놓은 모델구조를 제안함

기본 LSTM 구조에 순차적으로 텍스트 인풋

중간에 하나의 context vector로 압축해서 출력의 첫 단에 같이 넣어줌

(인코딩 - 컨텍스트 벡터 - 디코딩) 구조 -> transformer 구조와 유사함

기존의 통계적 번역보다 성능이 좋아짐

 

Transformer (2017)

self-attention 매커니즘

attention : 연관성이 있는 것들만 보겠다.

- 입출력간 관계 뿐만 아니라, 입력 문장 내부에서도 attention이 학습될 수 있도록 모델 구조를 짬

입력 내 연관성, 출력 내 연관성, 입출력 간 연관성

그 결과 텍스트 데이터에 대해 성능이 올라감

(transformer도 기본적으로 seq2seq 구조)

 

Transformer 나오면서 텍스트 도메인의 성장이 가속화됨


LLM

 

BERT (Bidirectional Encoder Representations from Transformers, 2018)

transformer 모델을 많이 키우고,

텍스트 도메인도 pre-training, fine-tuning이 잘 작동하는 것을 보여준 첫 모델

BERT의 pre-training 방식 : 빈 단어 맞추기 (Masked Language Model)

masking 된 것을 예측하는 방식으로 task setting해서 pretrain함

-> self-supervised

여러 입출력 관계를 만들어 낼 수 있음

 

GPT (Generative Pre-trained Transformer, 2018)

GPT pre-training 방식 : 다음 단어를 예측하는 방식으로 pretrain

transformer 구조를 쓰기는 하는데

decoder 모델 구조만 가져와서 모델을 키워서 setting

그렇게 해서 BERT처럼 pre-training, fine-tuning 하니까 잘 되더라

 

여기서 더 사이즈를 키워나감

 

더 공부할 것

https://jalammar.github.io/how-gpt3-works-visualizations-animations/

 


Computer Vision domain

 

EfficientNet (2019)

같은 수의 파라미터를 갖는 다른 모델들 보다 항상 accuracy가 높음, 획기적 성능 발전

좌상단 - 가능하면 적은 파라미터로 가능하면 높은 accuracy

CNN 구조에서 변화가능한 요소 3가지 : 레이어 수 / feature map의 resolution(channel 수를 키워서) / 채널 

EfficientNet 는 세가지 모두를 잘 조절해서 학습이 가능하도록 만듦

그 결과 더 효율적인 파라미터로 성능 향상

 

ViT (Vision Transformer, 2020)

transformer가 text 에서 성능이 좋다보니 vision domain에도 transformer를 가져오기로 함

이미지 데이터를 시계열 순으로 바꿔줘야 함

pre-train -> 다음 단어 예측과 유사함

이미지 데이터에서 다음 단어 예측 task와 유사한 건 뭘까?

이미지를 패치로 쪼개서, 다음 패치를 예측하는 방식으로

이미지를 패치로 쪼개서 트랜스포머 구조에 맞춰서 넣어줌 -> 그리고 CNN보다 성능이 잘 나옴

 

ChatGPT (2022)

GPT3 에서 이미 in-context learning으로 충격

GPT3 to GPT3.5 코딩 데이터를 넣어줌

why? 코드 = 논리정연한 표현 방법

코드 데이터를 넣어줬더니 지식 성능이 올라감

 

첨언.

OpenLLM 진영과 closedLLM 진영이 있었고 그 기술격차가 컸는데, LLaMA 이후 그 격차가 많이 줄어들었음.

Hugging Face : Open LLM Leaderboard

 

추가로 읽을 거리

https://paperswithcode.com/

- 공부할 때 좋음