분류 전체보기 71

[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..

[파이썬] for - else 문 ,while - else 문 (반복문 - else)

알고리즘 문제를 풀 때마다 반복문의 loop를 마친 후에 확인 과정을 위해 변수를 하나 더 설정하는게 뭔가 불편해서 방법이 없나 찾아봤습니다. 파이썬에서는 for-else 또는 while-else를 사용하면 그런 찝찝함을 해소할 수 있습니다. 이렇게 코드를 작성하면 반복문이 break가 되지 않고 loop를 끝까지 마친다면 else에 있는 코드를 실행합니다. for - else 를 예시로 들어서 한번 확인해봅시다. 기존의 코드부터 보겠습니다. a = [3, 5, 7, 15, 21] check = False # 짝수가 있는지 판단 for i in a: if i % 2 == 0: check = True break if check == False: print('짝수가 없습니다.') ==> 짝수가 없습니다. 이..

파이썬 Python 2021.08.04

[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)을 사용합니다. 손실 함수의 값을 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표입니다..

스칼라 미분, 벡터 미분, 행렬 미분

딥러닝 이론 공부 중 역전파의 수식을 보다가 스칼라, 벡터, 행렬에 대한 미분을 정리해놓는 게 좋을 것 같아서 기록합니다. 스칼라, 벡터, 행렬 스칼라는 크기만 있고 방향을 가지지 않는 양입니다. 상수나 변수 함수 모두 크기만 있고 방향을 가지지 않는다면 스칼라가 될 수 있습니다. 벡터는 스칼라와 대비되는 개념으로 크기와 방향을 가집니다. 열벡터 또는 행벡터를 아울러 의미합니다. 행렬(matrix)이란 실수 또는 복소수를 위 그림의 좌변과 같이 직사각형으로 배열한 것 입니다. 원소로 다항식이 들어가는 경우도 있습니다. CASE 스칼라, 벡터, 행렬 간 미분에서 따져볼 경우는 아래와 같습니다. 나머지 부분(행렬-벡터, 행렬-행렬)은 스칼라 - 벡터 또는 스칼라 - 행렬 간의 미분처럼 생각하면 구할 수 있겠..

[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..