머신러닝, 딥러닝 ML, DL 20

[Deep Learning] 9. CNN, 합성곱 계층, 패딩, 스트라이드

앞 포스팅에서 CNN에 합성곱 계층(Convolution Layer)과 풀링 계층(Pooling Layer)이 사용되는 것을 확인했습니다. 이번에는 합성곱 계층의 연산과 패딩(Padding), 스트라이드(Stride)에 대해 알아보겠습니다. 합성곱 연산 합성곱 계층에서는 합성곱 연산을 처리합니다. 합성곱 연산은 예시를 보면 바로 이해가 됩니다. $\circledast$ 은 합성곱 연산을 나타냅니다. 예시에서 합성곱 연산의 왼쪽이 입력 데이터이고, 오른쪽이 필터(또는 커널이라고 부릅니다.)입니다. 그림과 같이 합성곱 연산은 입력 데이터에 필터를 적용합니다. (합성곱 계층에서는 데이터를 특징 맵(Feature Map)이라고 부르기도 합니다. 입력 데이터는 입력 특징 맵, 출력 데이터는 출력 특징 맵이라고 부..

[Deep Learning] 8. 합성곱 신경망, CNN의 구조

이번 포스팅에서는 합성곱 신경망(Convolutional Neural Network), CNN의 구조를 알아보겠습니다. CNN은 신호 처리, 이미지 인식, 음성 인식 등 다양한 분야에서 사용됩니다. FCN CNN의 구조를 보기에 앞서 완전연결 신경망(Fully Connected Network)의 구조의 예시입니다. Affine 계층과 활성화 함수를 조합한 구조입니다. 문제점 이미지를 인식 알고리즘을 만드는 경우에 FCN을 사용한다면 이미지가 갖는 데이터의 형상이 무시됩니다. 가장 많이 나오는 예시인 MNIST 손글씨 데이터의 경우 (28, 28)의 형상을 갖는 이미지지만, FCN에 적용하려면 (28,28)의 형상을 한줄로 세워 (784)의 형태로 만들어 Affine 계층에 입력합니다. 그렇게 되면 공간적..

[Deep Learning] 7.시그모이드 함수 역전파 (미분, 구현)

시그모이드(Sigmoid) 함수의 수식은 아래와 같습니다. $y = \frac {1}{1+e^{-x}}$ 시그모이드 계층의 순전파는 위의 식을 그대로 구현하면 되고, 역전파를 위해 시그모이드 함수의 미분을 정리해보겠습니다. $\frac{\partial{y}}{\partial{x}} = \frac{\partial(1+e^{-x})^{-1}}{\partial{x}} \\ ~~~~~ = (-1) \frac{1}{(1+e^{-x})^2}(1+e^{-x})' \\ ~~~~~ = \frac{e^{-x}}{(1+e^{-x})^2} = \frac{1 + e^{-x} - 1}{(1+e^{-x})^2} \\ ~~~~~ = \frac{1+e^{-x}}{(1+e^{-x})^2} + \frac{-1}{(1+e^{-x})^2} ..

[Deep Learning] 6. 경사 하강법, 기울기

전 포스팅에서 수치 미분을 통해 함수의 기울기를 구했습니다. 이번에는 손실 함수의 기울기를 구하고, 경사 하강법을 통해 손실 함수가 최소가 되는 최적의 매개변수 값을 찾을 때까지 가중치를 갱신해보겠습니다. 이 전의 포스팅과 같이 구현과 관련된 내용은 제 깃허브 링크를 참고해주시기 바랍니다. https://github.com/Kingnamji/BigAI/blob/main/%EB%B0%91%EC%8B%9C%EB%94%A51_re/04_NNTrain.ipynb 기울기 변수가 여럿인 함수 (다변수 함수)에 대해 특정 변수를 제외한 나머지 변수를 상수로 간주하고 미분하는 것을 편미분이라고 하고, 모든 변수에 대한 편미분을 좌표로 갖는 벡터를을 기울기(gradient)라고 합니다. (이전 포스팅 내용) $f(x_0..

[Deep Learning] 5. 배치, 미니배치, 수치 미분, 기울기

전 포스팅에서 신경망 학습과 손실 함수에 대해 알아봤습니다. 이번에는 미니배치, 수치 미분, 기울기에 대해 다뤄보겠습니다. 이 전의 포스팅과 같이 구현과 관련된 내용은 제 깃허브 링크를 참고해주시기 바랍니다. https://github.com/Kingnamji/BigAI/blob/main/%EB%B0%91%EC%8B%9C%EB%94%A51_re/04_NNTrain.ipynb 미니배치 신경망의 학습은 훈련데이터로부터 이뤄진다고 했습니다. 학습동안 훈련데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾습니다. ( 이 내용은 https://kingnamji.tistory.com/18 에서 다뤘습니다. ) MNIST 데이터셋의 경우 훈련 데이터의 갯수가 60,000개 입니다. 이렇게..

[Deep Learning] 4.신경망 학습, 손실 함수(오차제곱합, 교차 엔트로피 오차)

신경망과 활성화 함수에 이어 이번에는 신경망 학습, 수치 미분, 손실 함수, 배치(미니 배치)에 대해 정리하겠습니다. 추후에 좀 더 깊게 볼 필요가 있다고 판단되는 내용은 따로 포스팅을 해보겠습니다. 구현과 함께 보고싶으시면 아래 제 깃허브 링크를 참고해주시기 바랍니다. https://github.com/Kingnamji/BigAI/blob/main/%EB%B0%91%EC%8B%9C%EB%94%A51_re/04_NNTrain.ipynb 학습 신경망에서 말하는 학습은 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 갱신(update)하는 것을 말합니다. 학습을 위한 지표로는 손실 함수(loss function)을 사용합니다. 손실 함수의 값을 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표입니다..

[Deep Learning] 3. 출력층의 소프트맥스 함수(Softmax), 항등 함수

출력층 설계 신경망의 출력층(Output Layer)에서 사용하는 활성화 함수는 현재 해결해야하는 문제가 무엇인지에 따라 달라집니다. 문제는 크게 분류(classification)와 회귀(regression)으로 나뉩니다. 분류는 데이터가 어느 범주, 클래스에 속하는지를 맞춰야하는 문제(ex : 10대 or 20대 or 30대 이상)고, 회귀는 수치를 예측해야하는 문제(ex : 182.1cm)입니다. 항등 함수 항등 함수(identity function)은 입력 신호를 그대로 출력합니다. 소프트맥스 함수 분류에서 사용하는 소프트맥스 함수(softmax function)의 식을 한번 보겠습니다. $y_k = \frac{e^{a_k}}{\sum_{i=1}^{n}e^{a_i}}$ $e^{x}$ 는 지수 함수,..

[Deep Learning] 2. 신경망, 활성화 함수(시그모이드 Sigmoid, 렐루 Relu)

퍼셉트론에서는 가중치 값 (예시에서 $w1, w2, b$) 를 직접 설정했습니다. 반면에 신경망(인공 신경망이라고도 부름)에서는 가중치 매개변수의 적절한 값을 데이터로부터 '학습'해서 정합니다. 신경망 신경망의 구조는 아래와 같습니다. Input Layer - Hidden Layer - Output Layer ( 입력층 - 은닉층 - 출력층 ) 앞서 봤던 퍼셉트론의 구조와 비슷합니다. 퍼셉트론을 다시 수식으로 한번 표현해보겠습니다. $y = \begin{pmatrix}0\;(b + w1x1 + w2x2 \leq 0 )\\1\;(b + w1x1 + w2x2 > 0)\end{pmatrix}$ (b는 편향 w1, w2는 가중치) 이때 함수 $h$ 를 $h(x) = \begin{pmatrix}0\;(x \leq..

[Deep Learning] 1. 퍼셉트론, Perceptron

퍼셉트론 퍼셉트론(perceptron) 알고리즘은 신경망(딥러닝)의 기원이 되는 알고리즘입니다. 퍼셉트론은 다수의 신호를 입력받고 하나의 신호를 출력하는 구조입니다. (적어도 하나의 output을 출력합니다.) 퍼셉트론은 신호가 흐른다 또는 흐르지 않는다. (각각 1과 0)의 두가지 값을 가집니다. 그림은 입력으로 2개의 신호를 받는 퍼셉트론입니다. x1, x2는 입력 신호, w1, w2는 가중치 y는 출력 신호입니다. 원은 뉴런 혹은 노드라고 부릅니다. 신호가 다음 노드로 보내질 때는 각각 고유한 가중치가 곱해집니다. 위의 예시에서는 y = w1x1 + w2x2로 나타낼 수 있으며 신호의 총합이 정해진 임계값을 넘으면 1을 출력합니다. 이때 임계값은 theta 또는 T로 주로 표시합니다. 퍼셉트론의 동..

[Pytorch] 파이토치로 GAN(Generative Adversarial Net) 구현하고 MNIST 손글씨 이미지 생성하기

yunjey/pytorch-tutorial PyTorch Tutorial for Deep Learning Researchers. Contribute to yunjey/pytorch-tutorial development by creating an account on GitHub. github.com 네이버 최윤제님의 자료를 통해 공부하고 기록한 글입니다. 파이토치를 통해 GAN을 구현하고, MNIST 데이터 셋을 이용해 실습했습니다. Google Colab 을 사용했습니다. 라이브러리 불러오기 및 하이퍼파라미터 설정 import torch import torch.nn as nn import torch.optim as optim import torchvision.utils as utils import tor..