본문 바로가기

회고록(TIL&WIL)

TIL 2022.05.16 머신러닝 정리

머신러닝?

어떤 문제를 풀기 위해 수학 공식을 만들었다는데 보다 복잡한 문제를 손쉽게 풀어내기 위해 머신러닝이 생겨나게 되었습니다.

 

모든 문제를 풀기 위해서는 먼저 입력값(Input)과 출력값(Output)을 정의해야 합니다. 출력값은 소수점(float)로 표현한다.

 

회귀 (Regression)

  • 출력값이 연속적인 소수점으로 예측하게 하도록 푸는 방법을 회귀라고 합니다.

분류 (Classification)

  • 0이면 미이수(Fail), 1이면 이수(Pass) 두가지로 분류할 경우를 이진 분류(Binary classification)
  • 여러개의 클래스로 나누어 분류할 경우다중 분류(Multi-class classification, Multi-label classification)

머신러닝 학습 방법 3가지

  • 지도 학습(Supervised learning): 정답을 알려주면서 학습시키는 방법
  • 비지도 학습 (Unsupervised learning): 정답을 알려주지 않고 군집화(Clustering)하는 방법
  • 강화 학습(Reinforcement learning): 주어진 데이터없이 실행과 오류를 반복하면서 학습하는 방법

선형 회귀 (Linear Regression)

정확한 값을 예측하기 위해 우리가 만든 임의의 직선(가설)과 점(정답)의 거리가 가까워지도록 해야합니다. 우리가 만든 직선 H(x)를 가설(Hypothesis)이라고 하고 Cost를 손실 함수(Cost or Loss function)라고 합니다.

 

다중 선형 회귀(Multi-variable linear regression)

선형 회귀와 똑같지만 입력 변수가 여러개 입력값이 2개 이상이 되는 문제를 선형 회귀로 풀고 싶을 때 다중 선형 회귀를 사용합니다.

 

경사 하강법 (Gradient descent method)

우리의 목표는 손실 함수를 최소화(Optimize)하는 것입니다. 컴퓨터는 사람처럼 수식을 풀 수 없기때문에 경사 하강법이라는 방법을 써서 점진적으로 문제를 풀어갑니다. 처음에 랜덤으로 한 점으로부터 시작합니다. 좌우로 조금씩 그리고 한번씩 움직이면서 이전 값보다 작아지는지를 관찰합니다. 

 

Learning rate

한칸씩 전진하는 단위, 그래프의 최소점에 도달하게 되면 학습을 종료하면 되겠죠.

Learning rate가 작다면 어떻게 될까요? 초기 위치로부터 최소점을 찾는데까지 많은 시간이 걸릴 것입니다.

Learning rate가 지나치게 크다면요? 우리가 찾으려는 최소값을 지나치고 검은 점은 계속 진동하다가 최악의 경우에는 발산하게 될 수도 있습니다. 이런 상황을 Overshooting이라고 부릅니다.

손실 함수의 최소점인 Global cost minimum을 찾는 것입니다. 그런데 우리가 한 칸씩 움직이는 스텝(Learning rate)를 잘못 설정할 경우 Local cost minimum에 빠질 가능성이 높습니다. Cost가 높다는 얘기는 우리가 만든 모델의 정확도가 낮다는 말과 같지요.

최대한 Global minimum을 찾기 위해 좋은 가설과 좋은 손실 함수를 만들어서 기계가 잘 학습할 수 있도록 만들어야하고 그것이 바로 머신러닝 엔지니어의 핵심 역할입니다!

 

데이터셋 분할

  • Training set (학습 데이터셋, 트레이닝셋) = 교과서, 머신러닝 모델을 학습시키는 용도로 사용합니다. 전체 데이터셋의 약 80% 정도를 차지합니다.
  • Validation set (검증 데이터셋, 밸리데이션셋) = 모의고사, 손실 함수, Optimizer 등을 바꾸면서 모델을 검증하는 용도로 사용합니다. 
  • Test set (평가 데이터셋, 테스트셋) = 수능, 정답 라벨이 없는 실제 환경에서의 평가 데이터셋입니다. 

논리 회귀 (Logistic regression)

0이면 미이수(Fail), 1이면 이수(Pass) 이런 값을 구하기 위해서 이진 논리 회귀(Binary logistic regression)로 해결할 수 있습니다.  Logistic function(=Sigmoid function)을 사용하여 확률을 0(미이수)과 1(이수)사이의 숫자로 나타낼 수 있게 되고 로지스틱 함수는 입력값(x)으로 어떤 값이든 받을 수가 있지만 출력 결과(y)는 항상 0에서 1사이 값이 됩니다.

실제 많은 자연, 사회현상에서는 특정 변수에 대한 확률값이 선형이 아닌 S 커브 형태를 따르는 경우가 많다고 합니다. 이러한 S-커브를 함수로 표현해낸 것이 바로 로지스틱 함수(Logistic function)입니다. 딥러닝에서는 시그모이드 함수(Sigmoid function)라고 불립니다. 실질적인 계산은 선형 회귀와 똑같지만, 출력에 시그모이드 함수를 붙여 0에서 1사이의 값을 가지도록 합니다.

 

논리회귀의 손실함수

정답 라벨 y가 0 이어야 하는 경우를 먼저 살펴봅시다. 예측한 라벨이 0일 경우 확률이 1(=100%)이 되도록 해야하고, 예측한 라벨이 1일 경우 확률이 0(=0%)이 되도록 만들어야 합니다.

반대로 정답 라벨 y가 1일 경우에는, 예측한 라벨 1일 때 확률이 1(=100%)이 되도록 만들어야 할 겁니다.

확률 분포 그래프의 차이를 비교할 때는 Crossentropy 라는 함수를 사용하게 되는데요.

간단하게 그래프로 개념을 이해하면, 임의의 입력값에 대해 우리가 원하는 확률 분포 그래프를 만들도록 학습시키는 손실 함수입니다.

Keras에서 이진 논리 회귀의 경우 binary_crossentropy 손실 함수를 사용합니다!

 

다항 논리 회귀 (Multinomial logistic regression)

클래스를 여러개의 클래스로 나눌 때, 이 방법을 다중 논리 회귀 (Multinomial logistic regression)이라고 부릅니다.

 

One-Hot Encoding

다항 분류 (Multi-label classification) 문제를 풀 때 출력값의 형태를 가장 예쁘게 표현할 수 있는 방법입니다. 다항 논리 회귀도 다항 분류에 속하기 때문에 원핫 인코딩 방법을 사용합니다. 여러개의 항을 0과 1로만 아름답게 표현할 수 있지요.

 

Softmax 함수

Softmax는 선형 모델에서 나온 결과(Logit)를 모두가 더하면 1이 되도록 만들어주는 함수입니다. 다 더하면 1이 되도록 만드는 이유는 예측의 결과를 확률(=Confidence)로 표현하기 위함인데요. 우리가 One-hot encoding을 할때에도 라벨의 값을 전부 더하면 1(100%)이 되기 때문입니다.

 

다항 논리 회귀의 손실 함수

마찬가지로 확률 분포의 차이를 계산할 때는 Crossentropy 함수를 씁니다. 항이 여러개가 되었을 뿐 차이는 이진 논리 회귀와 차이는 없습니다. 데이터셋의 정답 라벨과 우리가 예측한 라벨의 확률 분포 그래프를 구해서 Crossentropy로 두 확률 분포의 차이를 구한 다음 그 차이를 최소화하는 방향으로 학습을 시킬겁니다!

Keras에서 다항 논리 회귀의 경우 categorical_crossentropy 손실 함수를 사용합니다!

 

다양한 머신러닝 모델

구분하는 문제를 푸는 것은 분류 문제(Classification problem)이고 분류 문제를 푸는 모델을 분류기(Classifier)라고 부릅니다.

Support vector machine (SVM)

각 그래프의 축을 Feature(특징)라고 부르고 각 고양이, 강아지와 우리가 그린 빨간 벡터를 Support vector라고 부릅니다. 그리고 그 벡터의 거리를 Margin이라고 부르죠. 우리는 Margin이 넓어지도록 이 모델을 학습시켜 훌륭한 Support vector machine을 만들 수 있습니다.

 

k-Nearest neighbors (KNN)

KNN은 비슷한 특성을 가진 개체끼리 군집화하는 알고리즘입니다. 예를 들어 하얀 고양이가 새로 나타났을 때 일정 거리안에 다른 개체들의 개수(k)를 보고 자신의 위치를 결정하게하는 알고리즘이죠!

 

Decision tree (의사결정나무)

우리가 자주하는 스무고개와 같은 방식으로 예, 아니오를 반복하며 추론하는 방식입니다. 생각보다 성능이 좋아 간단한 문제를 풀 때 자주 사용해요.

 

Random forest

의사결정나무를 여러개 합친 모델입니다. 의사결정나무는 한 사람이 결정하는 것이라고 하면 랜덤 포레스트는 자유민주주의라고 보면 이해가 빠릅니다. 각각의 의사결정나무들이 결정을 하고 마지막에 투표(Majority voting)을 통해 최종 답을 결정하게 되죠!

 

머신러닝에서의 전처리

전처리(Preprocessing)란?

전처리는 넓은 범위의 데이터 정제 작업을 뜻합니다. 필요없는 데이터를 지우고 필요한 데이터만을 취하는 것, null 값이 있는 행을 삭제하는 것, 정규화(Normalization), 표준화(Standardization) 등의 많은 작업들을 포함하고 있습니다.

 

정규화 (Normalization)

정규화는 데이터를 0과 1사이의 범위를 가지도록 만듭니다. 같은 특성의 데이터 중에서 가장 작은 값을 0으로 만들고, 가장 큰 값을 1로 만들죠. 

 

표준화 (Standardization)

표준화는 데이터의 분포를 정규분포로 바꿔줍니다. 즉 데이터의 평균이 0이 되도록하고 표준편차가 1이 되도록 만들어주죠. 데이터의 평균을 0으로 만들어주면 데이터의 중심이 0에 맞춰지게(Zero-centered) 됩니다. 그리고 표준편차를 1로 만들어 주면 데이터가 예쁘게 정규화(Normalized) 되죠. 이렇게 표준화를 시키게 되면 일반적으로 학습 속도(최저점 수렴 속도)가 빠르고, Local minima에 빠질 가능성이 적습니다.

 

딥러닝이란?

딥러닝은 머신 러닝의 한 분야입니다! 선형회귀와, 비선형의 무언가를 번갈아 가며 사용하면서 층(Layer)을 여러개 쌓기 시작했고 이 모델은 정말 잘 동작했지요. 층을 깊게(Deep) 쌓는다고 해서 딥러닝이라고 불리게 되었습니다!

Perceptron을 여러개 붙인 Multilayer Perceptrons (MLP))라는 개념을 도입해서 문제를 풀어보려고 했습니다.

 

Backpropagation (역전파)

우리는 W(weight)와 b(bias)를 이용해서 주어진 입력을 가지고 출력을 만들어 낼 수 있다.

그런데 MLP가 만들어낸 출력이 정답값과 다를 경우 W와 b를 조절해야한다.

그것을 조절하는 가장 좋은 방법은 출력에서 Error(오차)를 발견하여 뒤에서 앞으로 점차 조절하는 방법이다.

 

Deep Neural Networks 구성 방법

Layer(층) 쌓기

딥러닝에서 네트워크의 구조는 크게 3가지로 나누어집니다.

  • Input layer(입력층): 네트워크의 입력 부분입니다. 우리가 학습시키고 싶은 x 값입니다.
  • Output layer(출력층): 네트워크의 출력 부분입니다. 우리가 예측한 값, 즉 y 값입니다.
  • Hidden layers(은닉층): 입력층과 출력층을 제외한 중간층입니다.

풀어야하는 문제에 따라 입력층과 출력층의 모양은 정해져 있고, 따라서 우리가 신경써야할 부분은 은닉층입니다.

기본적인 뉴럴 네트워크(Deep neural networks)에서는 보통 은닉층에 중간 부분을 넓게 만드는 경우가 많습니다. 예를 들면 보편적으로 아래와 같이 노드의 개수가 점점 늘어나다가 줄어드는 방식으로 구성합니다

 

네트워크의 Width(너비)와 Depth(깊이)

우리가 수많은 시간을 투자하여 완성한 적당한 연산량을 가진, 적당한 정확도의 딥러닝 모델이 있다고 가정합시다. 그 모델은 Baseline model(베이스라인 모델)이라고 보편적으로 지칭합니다. 

네트워크의 너비를 늘리는 방법 - 네트워크의 은닉층의 개수를 그대로 두고 은닉층의 노드 개수를 늘리는 방법입니다

네트워크의 깊이를 늘리는 방법 - 네트워크의 은닉층의 개수를 늘리는 방법입니다.

위 두가지 방법을 한번에 사용도 가능하다.

 

모델을 학습시키는 데 쓰이는 '단위'

우리는 이 데이터셋을 작은 단위로 쪼개서 학습을 시키는데 쪼개는 단위를 배치(Batch)라고 부른다.

 

예를 들어서 1,000만개의 데이터셋을 1,000개 씩으로 쪼개어 10,000번을 반복하는 것이죠. 이 반복하는 과정을 Iteration(이터레이션)이라고 부릅니다.

 

만약 100번 반복 학습을 한다면 100 epochs(에폭)을 반복한다고 말해요. batch를 몇 개로 나눠놓았냐에 상관 없이 전체 데이터셋을 한 번 돌 때 한 epoch이 끝납니다.

 

 

Activation functions (활성화 함수)

뉴런의 신호전달 체계를 흉내내는 함수를 수학적으로 만들었는데, 전기 신호의 임계치를 넘어야 다음 뉴런이 활성화 한다고해서 활성화 함수라고 부릅니다.

활성화 함수는 비선형 함수여야 합니다. 위에서 딥러닝은 비선형 함수를 사용한다고 했었죠? 비선형 함수의 대표적인 예가 바로 시그모이드 함수입니다. 따라서 비선형 함수 자리에 시그모이드를 넣으면 이렇게 되겠네요.

 

딥러닝에서 가장 많이 보편적으로 쓰이는 활성화함수는 단연 ReLU(렐루) 입니다. 왜냐하면 다른 활성화 함수에 비해 학습이 빠르고, 연산 비용이 적고, 구현이 간단하기 때문입니다.

 

여러 활성화 함수를 교체하는 노가다를 거쳐 최종적으로 정확도를 높이는 작업을 동반합니다. 이러한 노가다의 과정을 모델 튜닝이라고 부릅니다.

 

Overfitting, Underfitting (과적합, 과소적합)

딥러닝 모델을 설계/튜징하고 학습시키다 보면 가끔씩 Training loss는 점점 낮아지는데 Validation loss가 높아지는 시점이 있습니다. 우리가 풀어야하는 문제의 난이도에 비해 모델의 복잡도(Complexity)가 클 경우 가장 많이 발생하는 현상이 Overfitting과적합이다. 반대로 우리가 풀어야하는 문제의 난이도에 비해 모델의 복잡도가 낮을 경우 문제를 제대로 풀지 못하는 현상을 Underfitting과소적합이라고 합니다.

따라서 우리는 적당한 복잡도를 가진 모델을 찾아야 하고 수십번의 튜닝 과정을 거쳐 최적합(Best fit)의 모델을 찾아야합니다.

 

과적합을 해결하는 방법에는 여러가지 방법이 있지만 대표적인 방법

Data augmentation (데이터 증강기법)

원본 이미지 한 장을 여러가지 방법으로 복사를 합니다. 사람의 눈으로 보았을 때 위의 어떤 사진을 보아도 사자인 것처럼 딥러닝 모델도 똑같이 보도록 학습시킵니다. 이 방법을 통해 더욱 강건한 딥러닝 모델을 만들 수 있죠.

 

Dropout (드랍아웃)

Dropout은 단어에서도 의미를 유추할 수 있듯이 각 노드들이 이어진 선을 빼서 없애버린다는 의미가 있습니다. "사공이 많으면 배가 산으로 간다"라는 속담처럼 과적합이 발생했을 때 적당한 노드들을 탈락시켜서 더 좋은 효과를 낼 수 있습니다.

 

Ensemble (앙상블)

앙상블 기법은 컴퓨팅 파워만 충분하다면 가장 시도해보기 쉬운 방법입니다. 여러개의 딥러닝 모델을 만들어 각각 학습시킨 후 각각의 모델에서 나온 출력을 기반으로 투표를 하는 방법이죠. 앞에서 설명했던 랜덤 포레스트의 기법과 비슷합니다. 앙상블 또한 개념적으로 이해하는 것이 중요한데 여러개의 모델에서 나온 출력에서 다수결로 투표(Majority voting)를 하는 방법도 있고, 평균값을 구하는 방법도 있고, 마지막에 결정하는 레이어를 붙이는 경우 등 다양한 방법으로 응용이 가능합니다.

앙상블을 사용할 경우 최소 2% 이상의 성능 향상 효과를 볼 수 있다고 알려져 있습니다.

 

Learning rate decay (Learning rate schedules)

Learning rate decay 기법은 실무에서도 자주 쓰는 기법으로 Local minimum에 빠르게 도달하고 싶을 때 사용합니다.

학습의 앞부분에서는 큰 폭으로 건너뛰고 뒷부분으로 갈 수록 점점 조금씩 움직여서 효율적으로 Local minimum을 찾는 방법 Learning rate decay 기법을 사용하면 Local minimum을 효과적으로 찾도록 도와줍니다

Keras에서는 tk.keras.callbacks.LearningRateScheduler()와 tf.keras.callbacks.ReduceLROnPlateau() 를 사용하여 학습중 Learning rate를 조절합니다.

 

Convolutional Neural Networks (합성곱 신경망)

합성곱을 이용한 이 신경망 디자인을 합성곱 신경망(CNN)이라고 명칭하였고 이미지 처리에서 엄청난 성능을 보임 CNN은 얼굴 인식, 사물 인식 등에 널리 사용되며 현재도 이미지 처리에서 가장 보편적으로 사용되는 네트워크 구조입니다.

 

합성곱 신경망은 합성곱 계층(Convolution layer)과 완전연결 계층(Dense layer)을 함께 사용합니다.

합성곱 계층 + 활성화 함수 + 풀링을 반복하며 점점 작아지지만 핵심적인 특성들을 뽑아 내는데요.

여기서 풀링 계층(Pooling layer)은 특성 맵의 중요부분을 추출하여 저장하는 역할을 합니다.

 

풀링 계층 2x2 크기의 풀 사이즈(Pool size)로 스트라이드 2의 경우

Max pooling 계층을 통과할 경우 2x2 크기의 특성 맵에서 가장 큰 값들을 추출합니다.

Average pooling 계층을 통과할 경우 2x2 크기의 특성 맵에서 평균 값을 추출합니다.

 

풀링을 통과한 특성 맵은 2차원이고 완전연결 계층은 1차원이므로 연산이 불가능합니다.

따라서 우리는 평탄화 계층(Flatten layer)를 사용해서 2차원을 1차원으로 펼치는 작업을 하게 됩니다.

 

평탄화 계층을 통과하게 되면 우리는 완전연결 계층에서 행렬 곱셈을 할 수 있게되고 마찬가지로 완전연결 계층(=Dense=Fully connected) + 활성화 함수의 반복을 통해 점점 노드의 개수를 축소시키다가 마지막에 Softmax 활성화 함수를 통과하고 출력층으로 결과를 출력하게 됩니다.

 

CNN의 활용 예

물체 인식(Object Detection)

Object detection은 사진 이미지에서 정확히 물체를 인식하는 것을 뜻하며 컴퓨터비전에서 가장 중요한 기술입니다.

 

YOLO (You Only Look Once)

속도가 빠르다는 강점을 가졌고 다른real-time detection에 비해 정확도가 높아 유명한 Computer Vision 알고리즘입니다.

 

이미지 분할(Segmentation)

Segmentation은 각각의 오브젝트에 속한 픽셀들을 분리하는 것을 나타냅니다. Segmentation의 Class를 동물로 분리할 수 있고, 강아지와 고양이로 분리할 수 있습니다. 더욱 더 세분화해서 분류를 하게 된다면 강아지 중에서도 웰시코기, 비숑, 진돗개로도 분리를 할 수 있습니다. 인물과 배경을 Segmentation하여 배경은 흐릿하게 처리해서 인물을 Focus하는 기술입니다.

 

활용 예

  • 자율주행 물체인식
  • 자세 인식(Pose Detection)
  • 화질개선(Super Resolution)
  • Style Transfer
  • 사진 색 복원(Colorization)

다양한 CNN 종류

  • AlexNet (2012) - 의미있는 성능을 낸 첫 번째 합성곱 신경망이고, Dropout과 Image augmentation 기법을 효과적으로 적용하여 딥러닝에 많은 기여함
  • VGGNet (2014) - 큰 특징은 없는데 엄청 Deep한 모델(파라미터의 개수가 많고 모델의 깊이가 깊습니다)로 잘 알려져 있습니다. 또한 요즘에도 딥러닝 엔지니어들이 처음 모델을 설계할 때 전이 학습 등을 통해서 가장 먼저 테스트하는 모델이기도 하죠
  • GoogLeNet(=Inception V3) (2015) - 인셉션 모듈에서 주의깊게 보아야할 점은 차원(채널) 축소를 위한 1x1 합성곱 계층 아이디어입니다. 또한 여러 계층을 사용하여 분할하고 합치는 아이디어는, 갈림길이 생김으로써 조금 더 다양한 특성을 모델이 찾을 수 있게하고, 인공지능이 사람이 보는 것과 비슷한 구조로 볼 수 있게 합니다. 이러한 구조로 인해 VGGNet 보다 신경망이 깊어졌음에도, 사용된 파라미터는 절반 이하로 줄었습니다.
  • ResNet (2015) - 층이 깊어질 수록 역전파의 기울기가 점점 사라져서 학습이 잘 되지 않는 문제(Gradient vanishing)가 발생했습니다.  ResNet 연구진은 Residual block을 제안합니다. 그래디언트가 잘 흐를 수 있도록 일종의 지름길(Shortcut=Skip connection)을 만들어주는 방법 ResNet의 Residual block은 합성곱 신경망 역사에서 큰 영향을 끼쳤고 아직도 가장 많이 사용되는 구조 중에 하나

Transfer Learning (전이 학습)

전이 학습이라는 개념은 인간이 학습하는 방법을 모사하여 만들어졌습니다. 과거에 문제를 해결하면서 축적된 경험을 토대로 그것과 유사한 문제를 해결하도록 신경망을 학습시키는 방법을 전이 학습이라고 합니다. 전이 학습은 비교적 학습 속도가 빠르고 (빠른 수렴), 더 정확하고, 상대적으로 적은 데이터셋으로 좋은 결과를 낼 수 있기 때문에 실무에서도 자주 사용하는 방법입니다. 유명한 네트워크들과 같이 미리 학습시킨 모델(pretrained models)을 가져와 새로운 데이터셋에 대해 다시 학습시키는 방법입니다.

 

Recurrent Neural Networks (순환 신경망)

자연어 처리 등 다양한 분야에 활용된다. RNN은 은닉층이 순차적으로 연결되어 순환구조를 이루는 인공신경망의 한 종류입니다. 음성, 문자 등 순차적으로 등장하는 데이터 처리에 적합한 모델로 알려져 있는데요. 합성곱 신경망과 더불어 최근 들어 각광 받고 있는 신경망 구조입니다. 길이에 관계없이 입력과 출력을 받아들일 수 있는 구조이기 때문에 필요에 따라 다양하고 유연하게 구조를 만들 수 있다는 점이 RNN의 가장 큰 장점입니다. 주식이나 암호화폐의 시세를 예측한다던지, 사람과 대화하는 챗봇을 만드는 등의 다양한 모델을 만들 수 있습니다.

 

Generative Adversarial Network (생성적 적대 신경망, GAN)

서로 적대(Adversarial)하는 관계의 2가지 모델(생성 모델과 판별 모델)을 동시에 사용하는 기술입니다. 최근 딥러닝 학계에서 굉장히 핫한 분야입니다 

 

GAN은 위조지폐범과 이를 보고 적발하는 경찰의 관계로 설명할 수 있습니다.

  • Generator(위조지폐범): 이미지가 진짜(1)로 판별될수록 좋겠죠? 보다 정교하게 모델을 만들려고 노력하며 Target은 1로 나오도록 해야합니다. 가짜를 진짜인 1처럼 만들기 위하여 타깃인 1과 예측의 차이인 손실을 줄이기 위하여 Backpropagation을 이용한 weight를 조정할 것입니다.
  • Discriminator(경찰): 진짜 이미지는 1로, 가짜 이미지는 0으로 판별할 수 있어야합니다. 생성된 모델에서 Fake와 Real 이미지 둘다를 학습하여 예측과 타깃의 차이인 손실을 줄여야합니다.

이와같이 계속 진행되면 위조지폐범은 더욱 더 정교하게, 경찰은 더욱 더 판별을 잘하면서 서로 발전의 관계가 되어 원본과 구별이 어려운 가짜 이미지가 만들어지게 됩니다. 이렇게 두 모델이 대립하면서(Adversarial) 발전해 에폭(Epoch)이 지날 때마다 랜덤 이미지가 점점 정교하게 생성해 내는 것(Generative)을 볼 수 있습니다.

 

GAN을 사용한 예시들

  • CycleGAN
  • StarGAN
  • CartoonGAN
  • DeepFake
  • BeautyGAN
  • Toonify Yourself

2주차 숙제 - 당뇨병 데이터 이진 논리 회귀로 예측

https://colab.research.google.com/drive/1Pbb-7xZfAyZJxCCYK0bTsvO1Cw10IENL

3주차 숙제 - 숫자 MNIST(숫자손글씨) 데이터셋 학습

https://colab.research.google.com/drive/1j6i2BIdcMSYCEiG7NdnqejEYVT31QBpk

4주차 숙제 - CNN 으로 풍경사진 구분하기

https://colab.research.google.com/drive/1HT80lmJeO6eI85nlq8Tz4uCarlk4Pmi0