어린이에서 어른이되는 프로그래머(65)
-
11-1. ConvNet의 Conv 레이어 만들기
이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다. 누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다. 우리는 이전 포스트에서 CNN(Convolutional Neural Network, 합성곱 신경망)에 대해 잠깐 알아보았습니다. 아래의 CNN의 구조를 다시 보면 입력이 부분 부분으로 나뉘어 진행하다 합쳐지는 모습을 볼 수 있습니다. 이를 이해하기 위해서 우리는 CNN이 시작된 실험부터 살펴보겠습니다. 위는 CNN의 시작이라고 할 수 있는 고양이 실험 과정입니다. LeCun 교수님은 Hubel & Wiesel의 고양이 인지 실험에서 아이디어를 얻어 1989년 논문 "Backpropagation applied to h..
2020.07.03 -
01. XOR문제를 TF2.0 Keras로 풀어보자
포스트의 코드와 설명은 "시작하세요! 텐서플로 2.0 프로그래밍"을 참고하여 작성했습니다. 이번 포스트에서는 XOR문제를 TensorFlow2.X버전의 Keras API를 이용해 풀어보겠습니다. XOR문제는 이미 "모두를 위한 딥러닝" 포스트에서 다룬 적이 있지만, Keras에 대해 가장 쉽게 다가갈 수 있는 문제이기 때문에 이번 포스트에서는 Keras 활용에 중점을 두어 설명하겠습니다. · 인공지능의 첫 번째 겨울, XOR 문제 먼저 XOR(배타적 논리합)은 입력이 2개임을 가정할 때 입력 간의 비동일성을 판단하는 것으로, 쉽게 말해 두 입력이 다를 때만 XOR연산이 참이 되는 네트워크를 말합니다. 아래의 진리표를 보면 XOR 네트워크를 쉽게 이해할 수 있을 것입니다. X1 X2 XOR(X1,X2) 1..
2020.06.23 -
10-4. 레고처럼 네트워크 모듈을 마음껏 쌓아 보자
이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다. 누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다. 이제 우리는 이전 포스트들을 공부하며 뉴럴 네트워크(NN)에서 하나의 Unit(perceptron)을 만드는 방법과 네트워크 동작 원리에 대해 어느 정도 알고 있을 것입니다. 이번 포스트는 딥러닝의 기초를 마무리하는 단계로, 뉴럴 네트워크 모듈의 모양에 대해 알아보겠습니다. 먼저 우리는 뉴럴 네트워크의 Layer가 Input/Hidden/Output Layer로 분리되어 있다는 것을 알고 있습니다. 이제 우리는 퍼셉트론과 그 상위 단계인 Layer를 구성하여 뉴럴 네트워크를 레고 쌓듯이 마음껏 만들어볼 수 있으며 이..
2020.06.19 -
10-3. Dropout과 앙상블
이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다. 누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다. 이번 포스트에서는 딥 네트워크에서 Overfitting을 피하는 방법인 Dropout과 모델을 나누어 학습한 뒤 결과를 합쳐 예측하는 방법인 앙상블에 대해 알아보겠습니다. 먼저 Overfitting에 대해 간단히 복습해보겠습니다. 이전 포스트에서 우리는 이미 Overfitting에 대해 배운 적이 있습니다. Overfitting이란 Training dataset에만 너무 딱 들어맞아 전체 dataset의 측면에서 봤을 때는 적합하지 않은 모델입니다. 사실 Overfitting에 대한 설명은 아래 그림을 보면 직관적으..
2020.06.19 -
10-2. Weight 초기화 잘해보자
이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다. 누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다. Vanishing gradient 현상을 해결하기 위한 방법으로 저번 포스트에서 알아 본 ReLU에 이어 이번 포스트에서는 weight을 적절히 초기화하는 방법에 대해 알아보겠습니다. Hinton교수님은 기존의 방법으로 딥러닝 학습이 잘 되지 않았던 이유로 weight을 초기화하는 방법이 적절하지 않았다고 지적하였는데("We initialized the weights in a stupid way"), 그렇다면 먼저 weight을 적절한 방법으로 초기화하지 않았을 때 생기는 문제에 대해 알아보겠습니다. 가장 좋은 예시..
2020.06.17 -
10-1. Sigmoid 보다 ReLU가 더 좋아
이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다. 누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다. 이번 포스트에서는 뉴럴 네트워크에서 활성화 함수(Activation function)의 한 종류인 sigmoid의 문제점을 인지하고 이를 해결하기 위해 나온 ReLU에 대해 알아보겠습니다. 쉬운 이해를 위해 뉴럴 네트워크의 한 예를 들어보겠습니다. 위는 뉴럴 네트워크의 한 예시입니다. input Tensor가 x1과 x2일 때 Output이 shape=(1,)의 Tensor Y로 고정되어있는 점을 제외하면 Input Layer와 Output Layer 사이의 Hidden Layer에는 어떤 형태로의 연결이든 상관없습..
2020.06.13