ML Frameworks/Pytorch

[파이토치 첫걸음] 파이토치 연습과 딥러닝 맛보기

makeitworth 2021. 7. 6. 21:32

파이토치 첫걸음 도서 링크

 

파이토치 첫걸음 - 교보문고

딥러닝 기초부터 RNN, 오토인코더, GAN 실전 기법까지 | ■ 복잡한 건 파이토치에게 맡기고 모델에 집중하세요 딥러닝 분야의 네임드인 안드레이 카파시는 이런 말을 했습니다. “파이토치를 몇

www.kyobobook.co.kr

KDTx programmers AI dev course를 수강중이다.

이제 머신러닝에 대한 이론 수업과, 비교적 간단히 sklearn library를 활용한 머신러닝 알고리즘 부분을 넘어서, 뉴럴 네트워크를 배우고 있다.

그런데, 앞으로 딥러닝은 주로 pytorch를 활용하여 공부하게 된다는데, 한번도 활용해본 적이 없고, 수업시간에는 친절하게 가르쳐주지 않아 좀 쉽고 빠르게 연습해보고 싶어져서 이 책을 사게 되었다.

 

이 책의 가장 큰 장점은 얇다는 것.

보통의 IT 서적들과는 다르게 소설책 크기인데다 길이도 200여 페이지 남짓이다.

즉, 맘 잡고 읽으면 하루 이틀이면 다 읽을 수 있을 정도다. (그렇지만, 대부분 코드 라인 바이 라인 설명이 많아서 이동하면서 읽는 건 비추)

그만큼, 파이토치, 딥러닝에 대해 전혀 모르던 사람이 간단하게 감을 잡기에 좋은 책이다.

 

그리고, 간단한 예제 코드들을 라인바이라인으로 해설해준다.

이 역시 초보자에게 장점이다.

CNN, RNN 등의 기초 예제를 직접 구현한 코드를 라인바인라인 해설해준다.

CS231n 등의 동영상 강의로 이론 설명을 듣더라도 예제 코드에서 이해하지 못하는 부분들이 있었는데, 한번 더 복습하는 기회가 되었다.

 

예제코드가 있는 페이지 

목차

CHAPTER 1 딥러닝에 대하여
1.1 딥러닝이란 무엇인가
1.2 왜 배워야 하는가
1.3 무엇을 할 수 있는가

CHAPTER 2 파이토치
2.1 파이토치는 무엇이고 왜 써야 하는가
2.2 다른 프레임워크와의 비교
2.3 설치하는 법

CHAPTER 3 선형회귀분석
3.1 선형회귀분석이란 무엇인가
3.2 손실 함수 및 경사하강법
3.3 파이토치에서의 경사하강법

CHAPTER 4 인공 신경망
4.1 신경망이란 무엇인가
4.2 인공 신경망의 요소
4.3 전파와 역전파
4.4 모델 구현, 학습 및 결과 확인

CHAPTER 5 합성곱 신경망
5.1 합성곱 신경망의 발달 배경
5.2 합성곱 연산 과정
5.3 패딩과 풀링
5.4 모델의 3차원적 이해
5.5 소프트맥스 함수
5.6 모델 구현, 학습 및 결과 확인
5.7 유명한 모델들과 원리

CHAPTER 6 순환 신경망
6.1 순환 신경망의 발달 과정
6.2 순환 신경망의 작동 원리
6.3 모델 구현, 학습 및 결과 확인
6.4 순환 신경망의 한계 및 개선 방안

CHAPTER 7 학습 시 생길 수 있는 문제점과 해결 방안
7.1 오버피팅과 언더피팅
7.2 정형화
7.3 드롭아웃
7.4 데이터 증강
7.5 초기화
7.6 학습률
7.7 정규화
7.8 배치 정규화
7.9 경사하강법의 변형

CHAPTER 8 뉴럴 스타일 트랜스퍼
8.1 전이학습
8.2 스타일 트랜스퍼
8.3 스타일과 콘텐츠의 정의
8.4 학습 알고리즘
8.5 최적화 알고리즘
8.6 코드 구현

CHAPTER 9 오토인코더
9.1 소개 및 학습 원리
9.2 합성곱 오토인코더
9.3 시맨틱 세그멘테이션

CHAPTER 10 생성적 적대 신경망
10.1 소개 및 학습 원리
10.2 모델 구현 및 학습
10.3 유명한 모델들과 원리

 

 

 

 

6. 순환신경망 Recurrent Neural Network

6.1 순환 신경망의 발달과정

시퀀스 데이터: 순서가 존재하는 데이터 ex> 언어

시계열 데이터 : 순서가 존재하며, 특별히 시간에 따른 의미가 존재하는 데이터ex> 주가

-> 순환신경망은 순서가 있는 데이터에서 의미를 찾아내기 위해 고안된 모델

 

6. 2 순환 신경망의 작동 원리 

 시간에 따른 역전파 backpropagation through time ( BPTT) : 순환 신경망은 각 위치별로 같은 가중치를 공유하기 때문에 t=2 시점의 손실을 역전파하기 위해서는 t=0 시점의 노드 값들에도 다 영향을 줘야 한다. 시간을 역으로 거슬러 올라가는 방식으로 가중치를 업데이트

 

$\partialh2_in$을 미분하는 부분이 있는데 이를 계산해보면 $h2_(t=1)$이 나온다. 이 $h2_(t=1)$ 은 이보다 더 이전 시점의 값들의 조합으로 이루어져 있기 때문에 이를 제대로 미분하기 위해서는 $t=0$ 시점까지 계속 미분을 해야함

 

6.3

 

6.4 순환 신경망의 한계 및 개선 방안

타임 시퀀스가 늘어나면서 역전파 시 하이퍼볼릭 탄젠트를 사용한 활성 함수의 미분 값이 여러번 곱해짐 -> 0~1 사이의 값이므로 기울기 값이 역전파 될 때 타임 시퀀스가 길어질수록 기울기 소실 현상 발생 -> 활성화 함수를 바꾸거나 LSTM, GRU 등 사용

 

LSTM

순환 신경망 모델에 장기 기억을 담당하는 부분을 추가한 것

셀 상태 : 장기기억을 담당하는 부분 곱하기(x) 부분은 기존 정보를 얼마나 남길 것인지에 따라 비중을 곱함

더하기 (+) 부분은 현재 들어온 데이터와 기존의 은닉 상태를 통해 정보를 추가하는 부분

망각 게이트 : 기존 정보들로 구성되어 있는 셀 상태의 값을 얼마나 잊어버릴 지 정하는 부분

$$f_t = \partial(W_{if}x_t + b_{if}+W_{hf}h{t-1}+b_{hf})$$

\partial 은 시그모이드 함수. 현재 시점의 입력값과 직전 시점의 은닉 상태 값을 입력으로 받는 한 층의 인공 신경망 시그모이드 함수를 통과하게 되므로, 0~1의 값이 out됨 -> 기존 정보 전달 비중을 정할 수 있음

입력 게이트 : 셀 상태에 새롭게 저장할 정보를 정하는 부분 어떤 정보를 얼마나 저장할 것인가

탄젠트 활성함수를 통과하면서, -1~1 사이의 값을 가진, 셀에 추가할 정보가 되고, 시그모이드 함수를 통해 0~1 out으로 새롭게 추가할 정보를 얼만큼의 비중으로 셀 상태에 더해줄지 정하게 됨

 

다양한 게이트를 활용해 기존 RNN보다 더 나은 성능

 

GRU

LSTM의 변형 형태, 더 간단한 구조

셀, 은닉 상태를 나누지 않고 은닉 상태 하나로 합침

첫번 째 수식 : 업데이트 게이트, ((현재 시점 새로운 입력값)*가중치 + (직전 시점의 은닉상태 값)* 가중치) * 시그모이드 함수

두번 째 수식 : 리셋 게이트 , 업데이트 게이트와 같은 입력을 받고, 같은 시그모이드 함수를 통과 -> 이 비중은 다음 수식에 기존 은닉 상태의 값을 얼마나 반영할지 정할 때 사용됨

세번 째 수식 : 기존의 은닉상태에 가중치가 곱해진 값, 새로운 입력 값을 받아서 가중치를 곱하고 하이퍼볼릭 탄젠트를 통과해 새로운 값을 리턴

네번째 수식 : 새로운 은닉 상태를 구하는 부분

 

임베딩 개념

one-hot vector의 한계

1. 내적이 항상 0-> 두 알파벳, 단어, 문장 간의 의미적 차이, 유사도를 구하는 것이 불가능

2. 하나의 요소가 추가되면,  vector 길이가 늘어나므로 기존 모델이 무의미해짐

 

-> 알파벳이나 단어 같은 기본 단위 요소들을 일정한 길이를 가지는 벡터 공간에 투영하는 것

 

임베딩 함수를 이용한 LSTM, GRU 모델 구현

 

'ML Frameworks > Pytorch' 카테고리의 다른 글

맥북 프로 m1에서 ML PyTorch파이토치 세팅하기  (1) 2022.11.07