지니 코딩일기

[딥러닝/머신러닝] CNN의 종류 - LeNet-5, AlexNet, ZFNet, VGG-16, GoogLeNet , ResNet, Improving ResNet... 본문

Computer Science/딥러닝

[딥러닝/머신러닝] CNN의 종류 - LeNet-5, AlexNet, ZFNet, VGG-16, GoogLeNet , ResNet, Improving ResNet...

zzzl 2023. 6. 9. 19:55

합성곱 신경망(CNN)의 종류에 대해 알아보자.

이론과 하드웨어가 발전됨에 따라 CNN의 방식도 달라져왔다. 

 

 

목차

 

 


 

LeNet-5

- Layer 수 : 5개

- 손글씨 숫자를 인식하기 위해 나온 것

- 흑백 이미지에 훈련되었기 때문에 32x32x1인 채널 1개짜리임

- 유효합성곱(valid convolution)을 사용했기 때문에 layer 적용될 때마다 높이와 너비가 감소함

- 400(5x5x16)개의 노드를 120개의 뉴런에 각각 연결해서 완전연결층(fully connected layer) 만들었음

- 적용 내용

더보기
  • Filter size : 5x5
  • stride : 1
  • Pooling : 2x2 average pooling (stride=2)
  • Activation function:
    • 대부분의 unit이 sigmoid를 사용.
    • F6에서는 tanh를 사용.
    • 최종적인 output layer인 F7에서는 RBF (Euclidian Radia basis function unit)을 사용
  • loss function : MSE

 

AlexNet

AlexNet은 2012년 Alex Krizhevsky , Ilya Sutskever, Geoffrey Hinton에 의해 제시된 CNN architecture로 기본적인 구조는 LeNet과 비슷하나, GPU 2대를 이용하여 빠른 연산이 가능해지면서 병렬적인 구조를 가지게 됩니다.

 

- Layer 수 : 8개

- ILSVRC' 2012 Winner, 18.2% -> 16.4% top 5 error

- 컬러 이미지가 large conv layer에 들어감

- ReLU 최초 사용

- Data augmentation, Dropout, Norm Layer 사용

- 필터 크기

  • 11x11 필터, stride=4
  • 3x3 pooling, stride=2

- 적용 내용

더보기
  • Activation function
    • 처음으로 ReLU 사용. RELU를 사용하면 기존에 사용하던 Tanh, Sigmoid function에 비해 6배 빠르게 원하는 수준 이하의 error rate에 도달할 수 있습니다.
  • Over-fitting 방지를 위해 도입한 방법
    1. Data augmentation : 데이터셋 이미지를 좌우 반전을 시키거나 (flip augmentation), 이미지를 잘라서 (Crop augmentation) 데이터 수를 늘림. 또 RGB 값을 조정하여 (jittering) 데이터 수를 늘림.
    2. Dropout: rate 0.5
    3. Norm layer 사용 : 원시적인 형태의 batch normalization , 지금은 쓰이지 않음
  • Batch size 128
  • SGD momentum 0.9
  • learning rate 1e-2 , validation accuracy에 따라 manual 하게 낮춤
  • L2 weigh decay 5e-4
  • 7 CNN ensemble : error 18.2 % --> 15.4%

 

 

ZFNet

ZFNet은 feature map을 시각화하여 블랙박스를 들여다보고, 모델의 성능을 개선하는 것을 목표로 고안되었습니다.

feature map을 시각화할 수 있으니 어떤 식으로 CNN 구조를 수정하면 성능이 좋아질지 어느 정도 예측할 수 있게 되었습니다. 여러 차례 수정을 거쳐 최종적으로 만들어낸 ZFNet의 구조는 아래와 같습니다.

 

- Layer 수 : 8개

- ILSVRC' 2013 Winner, 16.4% -> 11.7% top 5 error

- AlexNet에 작은 변화를 준 것 (필터 크기 변화)

- 7x7 필터, stride=2

- 필터 크기 외에는 AlexNet과 유사함

 

 

 


 

 

우리는 앞서 8 layer 이하의 비교적 적은 수의 layer를 가진 CNN model 들을 보았습니다. 지금부터 살펴볼 VGG, GoogleNet의 부터는 layer가 더 깊게 쌓이기 시작합니다. 두 논문 모두 논문 제목에서부터 본인들이 layer를 깊게 쌓았음을 강조하고있을 정도로, 더 네트워크를 깊게 만들었음은 이전 모델들과의 핵심적인 차이점이자, 좋은 성능을 내는 이유이기도 합니다. 더 깊은 네트워크가 좋은 이유는 2) 더 깊은 딥러닝 모델들 에서 간략히 설명했습니다.

그러나 네트워크를 깊게 쌓는다는 것은 생각보다 당시에는 쉬운 일이 아니었습니다. Gradient vasnishing /exploding 과 같은 문제를 효과적으로 해결할 수 있어야 하고, 파라미터 수가 늘어나 overfitting을 야기할 수 있기 때문입니다.

 

VGG-16

VGGNet은 ILSVRC' 14에서 준우승을 차지한 모델로, 당시 7.3 % 의 Top 5 error를 보였습니다. 13년도에 우승했던 ZFNet 이 11.7%의 Top 5 error를 보였던 것을 감안하면 상당히 많이 향상된 것으로 볼 수 있습니다. AlexNet, ZFNet이 모두 8개의 층을 사용하는 반면 네트워크를 16-19 층까지 쌓아 VGG를 기점으로 네트워크의 구조가 많이 깊어지게 됩니다.

Small filters, Deeper networks.

작은 필터를 사용해서 layer를 깊게 쌓으면 성능이 더 좋아진다는 것을 보여주었다 !

 - Layer 수 : 16

- ILSVRC' 2014 준우승, 11.7% -> 7.3% top 5 error

- 계속 convolution, max-pooling이 반복되는 구조로, 체계적으로 진행됨

- Convolution : 3x3 필터만 사용, stride=1 (Same convolution) ➡️ 채널 수 2배되고

- Max-Pool : 2x2, stride=2 ➡️ 높이, 너비 1/2배 됨

- 작은 필터로 layer 깊게 쌓아서 비선형성을 추가하고(깊게 쌓기), parameter 수를 감소(작은 필터)시켜서 성능을 향상하였다.

 

  • 3x3의, 보다 작은 필터를 사용합니다. ( VGG 이전에는 5x5를 주로 사용했습니다. )
    • 작은 필터가 주는 효과
      1. 필터의 사이즈를 줄이면서 보다 깊게 쌓았을 때 더 효율적인 receptive field를 가지게 됩니다. 더 넓은 필터를 쓰고 얇은 층을 쌓는 것이나, 작은 필터를 쓰고 깊게 쌓는 것이나 receptive field가 같다는 의미입니다.
      2. Layer가 깊어지면서 다수의 activation function을 통과하므로 더 많은 non-linearity를 줄 수 있게 됩니다.
      3. 층 당 더 적은 수의 파라미터를 사용하게 됩니다.
        ex) 10×10 image에 7×7 filter 적용하여 4×4 feature map 생성 → parameter 개수: 49개
        ex) 10×10 image에 3×3 filter 3번 적용하여 4×4 feature map 생성 → parameter 개수: 9개씩 3번 총 27개
  • padding을 이용해 이미지 사이즈를 유지하게 됩니다.
    • padding이 주는 효과
      • 이전에는 Convolution 연산의 특징상 Layer가 깊어지게 되면 가장자리 부분이 주는 영향력이 점점 줄어들게 되고 이미지 사이즈를 유지할 수 없었습니다. 그러나 VGG부터는 padding을 도입하면서 Network가 깊어져도 이미지 사이즈를 유지할 수 있게 됩니다.

 

 

GoogLeNet

영화 Inception에서는, 다른사람의 꿈에 접속하고, 꿈속의 꿈에 접속하고, 꿈속의 꿈속의 꿈에 접속하는 식으로 계속 깊이 들어가 표적의 무의식에 도달해 어떤 생각을 심어주거나 하는 내용을 담고 있습니다. GoogleNet의 핵심이 되는 Inception module의 이름이 이 영화에서 비롯된 것입니다.

 

GoogleNet은 ILSVRC' 14에서 우승을 차지했으며, "Going Deeper with Convolutions" 라는 논문의 제목답게 전년도에 우승한 ZFNet보다 무려 14층을 더 쌓아, 22층의 구조를 만듭니다. 현재는 GoogleNet보다 성능이 더 좋은 네트워크들이 많이 등장했지만, Inception module 이라는 아이디어는 최근까지도 다른 모델에서 응용되기도 하고 또 Classification 에 쓰이지는 않더라도, 좋은 Feature selector 로서 컴퓨터 비전 분야의 다른 문제해결에 아직까지도 활발히 이용되고 있습니다.

- Layer 수 : 22 

- ILSVRC'14 우승, 6.7 % top 5 error

- 효과적인 "Inception" module을 여러 개 쌓은 구조

- 1x1 convolutions 가짐

- FC layer 없음 (Output layer 에서만 한번 나옴)

- 오직 500만개의 파라미터 사용

 

 

Inception Module

- 1개의 layer, 다수의 Filter 전략

- 어떤 필터가 좋은지 모르니까 다 써보자!는 전략 (1x1, 3x3, 5x5, max-pooling 전부 사용)

 

➡️  그래서 1x1 convolution, 3x3 convolution, 5x5 convolution 그리고 3x3 max pooling 4가지를 병렬적으로 처리하고 output을 concat 합니다. 이것이 naive inception module입니다.

 

단점

하지만, 이는 실제로는 잘 작동하지 않았습니다. 여러가지 convolution 및 pooling의 output을 하나로 concat 하는 것은 dimension을 상당히 늘릴 수 밖에 없었고 너무나도 비효율적이었습니다.

  1. 연산량 증가 (convolution 많이 하니까)
  2. hardware 제약 (메모리 등)

 

해결책

1 ✕ 1 Convolution의 역할

그래서 이번에는 Inception module 안에 1x1 convolution층을 추가합니다. Convolution 연산은 연산량이 많으니까, Convolution 연산 전에 (1x1 conv를 추가) dimension을 줄여주고, max pooling은 Convolution에 비해 간단하니 연산 이후에 (1x1 conv를 추가) dimension을 줄여 모든 output을 concat 합니다. 이렇게 inception은 계산상의 어려움 없이 layer 를 늘릴 수 있게 됩니다. 병렬적으로 수행된 연산들은 Inception module을 나오면서 Concat 되어 다음 Layer로 넘어갑니다.

1x1 convolution은 Dimension이 깊은 network에 대해 각 포인트마다 중요하다고 생각되는 정보를 뽑아내는 역할을 한다고도 볼 수 있습니다. Inception에서는 Channel 수를 줄여 계산상에서의 이점을 보도록 도와주고, 비선형성을 증가시켜 더 복잡한 함수도 approximation 할 수 있도록 도와주는 역할을 합니다.

 

더보기

GoogleNet에는 Auxilary classifier라고 하는 중간중간에 Output을 내는 구조가 있습니다. GoogleNet에서 처음 도입한 방법으로, 중간중간에 Output을 먼저 만들고 이를 Back propagation시 반영해 Layer가 깊어짐에 따라 발생할 수 있는 Gradient vanishing / explosion 을 방지합니다.

⇒ 인셉션 네트워크에 정규화 효과를 주고 overfitting 방지해줌

제일 초창기 모델인 GoogleNet (Inception-v1)의 경우에는 Auxilary classifier를 2개 썼으나, Inception-v2, v3 부터는 Auxilary classifier를 하나로 줄였고, Inception-v4부터는 Auxilary classifier를 아예 사용하지 않습니다.

왜 요즘은 Auxilary classifier를 사용하지 않을까요? Auxilary classifier에는 한가지 문제가 있습니다. 초반 Layer에서 output을 내고 이걸 Backpropagation에 반영하면 당연하게도 초반 Layer에서 잘 Classification을 잘 학습시킬 수 있는 방향이 어느정도 반영되어 학습이 진행될 것입니다. 이에따라 최종 Classification layer에서 Optimal한 feature가 뽑히지 않는 문제가 있습니다.

 

 

간단 정리

배경 : 어떤 필터가 좋을지 모르겠어서 다 적용하자! 

내용 : Inception module을 여러 개 쌓은 구조 (1x1, 3x3, 5x5, pooling 다 적용)

문제점 : naive inception module에서 연산량 증가 문제 발생

해결책 : 1x1 convolution층을 추가 (Bottleneck layer)

1x1의 역할 : convolution의 채널 개수를 줄여서 연산량을 줄이고 trainable parameter 수를 줄여준다

  1. 연산량을 줄여줌
  2. trainable parameter 수를 줄여줌

1x1의 효과 :

  1. inception은 계산상의 어려움 없이 layer 를 늘릴 수 있게 된다
  2. 비선형성 더해줌 (1x1 conv 추가하면서 conv 연산이 늘어나니까 ReLU 등 활성화함수를 더 많이 거치기 때문)

➡️ 결론 : 22 layers의 깊은 CNN 가능하게 함 (깊고 복잡한)

 

# Network in Network (Lin et al)에서 소개된 개념 (NiN)

# Bottleneck layer

 

 

 

ResNet

CNN을 연구하면서 기존 모델들은 Layer을 깊게 쌓을 수록 성능이 더 좋아질것이라고 예상했지만, 실제로는 20층 이상부터 성능이 낮아지는 현상인 Degradation 문제가 발생했습니다. ResNet은 Residual Learning이라는 개념을 통해 모델의 층이 깊어져도 학습이 잘 되도록 구현한 모델입니다.

ResNet은 무려 152층까지 네트워크를 쌓으며 ILSVRC'15와 COCO'15 에서 우승하게 됩니다. 처음으로 Human error를 능가하는 3.57%의 top5 error 를 보입니다. ResNet에서 제시하는 Residual Learning이라는 개념은 이후 많은 모델들에서 응용되었으며, 아직까지도 많은 사람들이 성능도 좋고, 구현도 편하고 단순하다는 점 때문에 ResNet을 유용하게 사용하고 있습니다.

 

 

문제점

배경 - 매우 깊은 네트워크의 문제점

"plain" convolutional neural network에서 Layer를 무작정 늘렸을 때 성능이 오히려 떨어졌다.

Training과 Test 모두에서 shallow보다 성능이 떨어졌기 때문에 Overfitting 때문이 아님을 알 수 있다.

우선 직관적으로 우리는 Gradient vanishing / explosion이 발생할 수 있음을 알 수있습니다. 이것 외에도 우리는 Degradation Problem이라고 부르는, layer가 어느정도 이상으로 깊어지면 오히려 성능이 안좋아지는 현상이 벌어짐을 알 수 있습니다. 이 현상의 원인을 어떤 사람들은 layer가 깊어졌을 때 Optimization이 제대로 되지 않아서 라고 추측했습니다.

만약에 Optimization 문제라면 우리는

1) 새로운 Optimizer를 만들거나,
2) 깊어지더라도 쉽게 Optimization을 할 수 있는 새로운 Architecture를 만들어 문제를 해결할 수 있습니다.

Optimizer를 새로 만드는 것은 매우 어려운 문제이기 때문에 많은 사람들은 새로운 Network를 만드는데 집중했습니다.(새로운 architecture == Residual Block)

 

 

해결책

Residual Block 이란?

 2개의 convolution layer 를 건너뛰는 short cut을 만드는 것이다.

 두번째 affine transformation 에다가 input feature를 더한 것을 activation function(non-linear function, ReLU)에 넣는다. 이것이 residual block이다.

 

Residual block을 여러 개 쌓아 residual network를 만들 수 있으며, 매우 깊은 네트워크를 만들 수 있다.

덕분에 Plain neural network와 비교했을 때 Layer를 상당히 깊게 쌓았음에도 적게 쌓았을 때보다 에러가 낮으며 degradation problem이 발생하지 않은 것을 알 수 있습니다. 

그래프를 살펴보면 급격이 error rate이 떨어지는 구간이 발생한다. 이는 Saturation이 발생하여 Learning rate를 튜닝하는 과정에서 발생하는 것이다.

 

50층 이상 네트워크일 때 (Deep)

50층 이상의 deep network에서는 효율을 높이기 위해 Bottleneck 구조(1x1 convolution)를 사용한다.

*이는 GoogLeNet과 유사하다

 

그림과 같이 기존 convolution layer의 앞뒤로 1x1 conv layer를 추가하여 dimension을 줄여 연산량을 줄여준다.

왼쪽은 기존의 Residual Block, 오른쪽은 bottlenect을 적용한 Residual Block

 

 

기존의 Residual Block은 한 블록에 Convolution Layer(3X3) 2개가 있는 구조였습니다. Bottleneck 구조는 오른쪽 그림의 구조로 바꾸었는데 층이 하나 더 생겼지만 Convolution Layer(1X1) 2개를 사용하기 때문에 파라미터 수가 감소하여 연산량이 줄어들었습니다. 또한 Layer가 많아짐에 따라 Activation Function이 증가하여 더 많은 non-linearity가 들어갔습니다. 즉 Input을 기존보다 다양하게 가공할 수 있게 되었습니다.

결론적으로 ResNet은 Skip Connection을 이용한 Shortcut과 Bottleneck 구조를 이용하여 더 깊게 층을 쌓을 수 있었습니다.

ResNet 초창기 논문에서는 110 Layer에서 가장 적은 에러가 나왔고, 1000개 이상의 layer가 쌓였을 때는 오버피팅이 일어났다고 합니다.

 

 

ResNet이 잘 되는 이유 

원 논문에서는 자신들이 어떤 이론을 바탕으로 결과를 도출했다기 보다는 경험적으로 residual block을 쓰니 결과가 좋게 나왔다고 말합니다. 그럼에도 불구하고 ResNet이 왜 잘 동작하는지 설명하려는 많은 노력이 있었고, 아직까지도 많은 사람들이 연구하고 있습니다. 그 중에서 소개할 한 가지는 바로 Residual Net이 만들어내는 모델을 이용하는 것은 Optimal depth에서의 모델을 사용하는 것과 비슷하다는 가설입니다.

우리는 쉽게 Optimal depth를 알 수가 없습니다. 20층이 Optimal인지, 30층이 optimal인지, 100층이 optimal인지 아무도 모릅니다. 하지만, degradation problem은 야속하게도 우리는 알 수 없는 optimal depth를 넘어가면 바로 일어납니다.

ResNet은 엄청나게 깊은 네트워크를 만들어주고, Optimal depth에서의 값을 바로 Output으로 보내버릴 수 있습니다. 이게 어떻게 가능할까요? 바로 Skip connection 때문입니다. ResNet은 Skip connection이 존재하기 때문에 Main path에서 Optimal depth이후의 Weight와 Bias가 전부 0에 수렴하도록 학습된다면 Optimal depth에서의 Output이 바로 Classification으로 넘어갈 수 있습니다. 즉 Optimal depth이후의 block은 모두 빈깡통이라는 것입니다.

예를들어 27층이 Optimal depth인데 ResNet 50에서 학습을 한다면, 28층부터 Classification 전까지의 weight와 bias를 전부 0으로 만들어버리는겁니다. 그러면 27층에서의 output이 바로 Classification에서 이용되고, 이는 Optimal depth의 네트워크를 그대로 사용하는것과 같다고 볼 수 있습니다.

 

 

 

간단 정리

배경 : 깊은 네트워크의 문제 발생 ! ➡️ Layer를 늘릴수록 성능이 좋아질 것이라고 생각했지만, 실제로는 20층 이상부터 성능이 낮아지는 Degradation 문제가 발생했다. train, test 모두에서 성능이 떨어졌기 때문에, optimization 문제라고 생각했고, architecture를 개선하여 해결하려 했다.

내용 : Residual Block 구조를 도입하여 1개의 conv를 건너뛰고 다음번 ReLU 연산에 (z[l+2]+a[l])를 넣는 shortcut을 도입한 것 

50층 이상의 deep network에서 : 효율을 높이기 위해 Bottleneck 구조(1x1 convolution)를 사용한다. (GoogLeNet과 유사)

효과 : 22층에서 152층까지 늘리는 성과를 냄. 모델의 층이 깊어져도 학습이 잘 되도록 구현함

ResNet이 잘 되는 이유 : Skip connection이 존재하기 때문에 Main path에서 Optimal depth이후의 Weight와 Bias가 전부 0에 수렴하도록 학습된다면 Optimal depth에서의 Output이 바로 Classification으로 넘어갈 수 있습니다.

➡️ 몇 층이 좋은지 모르는데, 일정 층을 넘어가면 심각하게 성능이 떨어짐. ResNet은 이 상황에서 skip connection(shortcut)이 있으므로 뒤에 층을 무시하고 좋은 결과가 나온 층의 값을 바로 Output으로 내보낼 수 있음 !

 


 

Improving ResNet ...

 ResNet을 확장한 것들

  • Identity Mappings in Deep Residual Networks
  • Wide Residual Networks
  • ResNeXt
  • Deep Networks with Stochastic Depth
  • SeNet
  • DenseNet

 

Identity Mappings in Deep Residual Networks

Identity Mappings in Deep Residual Networks는 "Deep Residual Networks" 또는 "ResNet"에서 사용되는 개념입니다. ResNet은 딥러닝 네트워크에서 깊은 구조를 효과적으로 학습하기 위한 방법 중 하나로, 잔차 학습(residual learning)을 기반으로 합니다.

ResNet은 일반적인 딥러닝 네트워크와 달리 스킵 연결(skip connection)이라고도 불리는 바로 가기 연결(shortcut connection)을 도입합니다. 스킵 연결은 입력과 출력을 직접적으로 연결하여 정보의 흐름을 용이하게 만듭니다. 그러나, 스킵 연결은 주로 입력과 출력의 차원이 동일한 경우에 사용됩니다.

Identity Mappings in Deep Residual Networks는 이러한 스킵 연결을 좀 더 강화한 개념입니다. 일반적인 스킵 연결은 입력과 출력을 단순히 더하여 연결하는 방식이지만, Identity Mappings에서는 입력을 출력과 동일한 차원으로 매핑시키는 작업(identity mapping)을 추가합니다. 이를 위해 1x1 컨볼루션(1x1 convolution)과 배치 정규화(batch normalization)을 사용하여 차원 매핑을 수행합니다.

이러한 Identity Mappings은 네트워크가 더 깊어질수록 입력과 출력 간의 차원이 커지는 문제를 해결하기 위해 도입되었습니다. Identity Mappings를 사용하면 스킵 연결에 의한 정보의 흐름이 더욱 원활하게 이루어지며, 그 결과로 더 깊은 네트워크를 효과적으로 학습할 수 있게 됩니다.

Identity Mappings in Deep Residual Networks는 ResNet의 핵심 개념 중 하나로, 딥러닝 네트워크의 깊이를 증가시키면서도 학습 성능을 개선하는 데 기여합니다.

 

➡️ 네, 맞습니다. Identity Mappings in Deep Residual Networks는 ResNet의 핵심 개념 중 하나이며, 스킵 연결을 강화한 방법으로 입력과 출력을 동일한 차원으로 매핑하는 작업을 수행합니다. 이를 통해 딥러닝 네트워크의 깊이를 증가시키면서도 정보의 흐름을 보다 원활하게 만들어 학습 성능을 개선할 수 있습니다. 이는 ResNet의 성공적인 적용을 통해 입증된 개념입니다.

 

 

 

Deep Networks with Stochastic Depth

Dropout과 유사하게 중간중간 노드를 랜덤하게 삭제한다 (conv layer들만)

⇒ 제거되더라도 흘러갈 수 있다

어떤 block을 제거할지는 랜덤하게 선택한다

 

 

Densely NN

Densely NN은 표준처럼 많이 사용됨

challenge에 나온 것은 아니지만, 굉장히 여러 애플리케이션에서 두루 좋은 성능 내는 구조

최근까지도 제법 많이 사용됨

residual block은 스킵 커넥션을 이용해서 이전의 정보를 아래쪽에 보내주는 역할을 한다면, 얘는(residual) 더하기 역할인데 , 이거는(Dense block) 이어붙이기 역할(concat), bottleneck도 등장하고, 이런게 Dense block이다.

 

 

EfficientNet

2019년도에 소개된 EfficientNet은 내가 원하는 resource를 전해주면 성능이 바뀌는데, 이것을 굉장히 쉽게 컨트롤 할 수 있는 버전이다.

100만개 파라미터 → 쉽게 100만개 쓰는 버전 나온다 ?

가장 작은 버전이 사람이 디자인하는 것이 아니고, NAS라고 불리는 기계학습 방법으로 이것을 찾는다 (딥러닝을 위한 딥러닝 느낌) → 이런거 원래 사람이 하려면 굉장히 많은 돈과 시간이 들었는데, 이제 그러지 않아도 된다는

 

퍼포먼스는 2019년도의 결과인데, CNN을 이용해서 달성한 것 중에는 거의 best라고 볼 수 있다

 

지금은 우리 수업에서는 cover를 다 못하겠지만, transformers라고 불리는 architecture를 이용해서 문제를 풀고 있다 ⇒ 성능 좋음

 

 

 

 

 

<딥 러닝을 이용한 자연어 처리 입문> E-book을 보고 공부한 내용 + "한땀한땀 딥러닝 컴퓨터 비전 백과사전" 인터넷 자료 + 학부에서 배운 강의 내용을 정리한 자료입니다.

https://wikidocs.net/21679

 

06-01 머신 러닝이란(What is Machine Learning?)

딥 러닝을 포함하고 있는 개념인 머신 러닝(Machine Learning)의 개념에 대해서 학습합니다. ## 1. 머신 러닝(Machine Learning)이 아닌 접근 방…

wikidocs.net

https://wikidocs.net/147016