PyTorch로 딥러닝 배우기 3

한준호·2021년 7월 26일
0

딥러닝 배워보기

목록 보기
3/7
post-thumbnail

Neural Network (인공 신경망)

머신 러닝 용어 정리

분류(Classification)와 회귀(Regression)

회귀(Regression)
어떠한 연속적인 값의 범위 내에서 예측값이 나오는 경우.

  • 선형 회귀(Lineare Regression)
  • 로지스틱 회귀(Logistic Rgression)


    분류(Classification)
  • 이진 분류(Binary Classification)
    주어진 입력에 대해서 둘 중 하나의 답을 정하는 문제이다.
  • 다중 레이블 분류(Multi-lable Classification)
    주어진 입력으로부터 정해진 클래스 중 하나로 판단하는 것을 다중 클래스 분류 문제라고 한다.

지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning)

  • 지도 학습(Supervised Learning)
    레이블(Label)이라는 정답과 함께 학습하는 것을 말합니다.
    레이블이라는 말 외에도 y, 실제값 등으로 부르기도 한다.
  • 비지도 학습(Unsupervised Learning)
    기본적으로 목적 데이터(또는 레이블)이 없는 학습 방법이다.
  • +)자기지도 학습(Self-Supervised Learning, SSL)
    레이블이 없는 데이터가 주어지면, 모델이 학습을 위해서 스스로 데이터로부터 레이블을 만들어서 학습하는 경우
  • +)강화 학습
    어떤 환경 내에서 정의된 에이전트가 현재의 상태를 인식하여, 선택 가능한 행동들 중 보상을 최대화하는 행동 혹은 행동 순서를 선택하는 방법이다.

샘플(Sample)과 특성(Feature)

많은 머신 러닝 문제가 1개 이상의 독립 변수
x를 가지고 종속 변수 y를 예측하는 문제이다.
머신 러닝에서는 하나의 데이터, 하나의 행을 샘플(Sample)이라고 부른다.종속 변수 y를 예측하기 위한 각각의 독립 변수 x를 특성(Feature)이라고 한다.


정확도(Accuracy)

머신 러닝에서는 맞춘 문제수를 전체 문제수로 나눈 값


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

  • 과적합(Overfitting)
    훈련 데이터를 과하게 학습한 경우를 말한다.
    훈련 데이터는 실제로 존재하는 많은 데이터의 일부이다. 그런데 기계가 훈련 데이터에 대해서만 과하게 학습하면 테스트 데이터나 실제 서비스에서의 데이터에 대해서는 정확도가 좋지 않은 현상이 발생한다.
    훈련 데이터에 대한 정확도는 높지만, 테스트 데이터는 정확도가 낮은 상황이다. 즉, 테스트 데이터의 오차가 증가하기 전이나, 정확도가 감소하기 전에 훈련을 멈추는 것이 좋다.
    과적합을 막을 수 있는 드롭아웃(Dropout), 조기 종료(Early Stopping)과 같은 몇 가지 방법이 존재한다.
  • 과소 적합(Underfitting)
    훈련 자체가 부족한 상태이므로 과대 적합과는 달리 훈련 데이터에 대해서도 보통 정확도가 낮다는 특징이 있다.



퍼셉트론(Perceptron)

퍼셉트론(Perceptron)

초기의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘이다.
실제 뇌를 구성하는 신경 세포 뉴런의 동작과 유사하다.

다수의 입력을 받는 퍼셉트론

x는 입력값, W는 가중치(Weight), y는 출력값

가중치가 신호를 전달하는 역할을 한다.
각각의 입력값에는 각각의 가중치가 존재하는데, 이때 가중치의 값이 크면 클수록 해당 입력 값이 중요하다는 것을 의미한다.

각 입력값이 가중치와 곱해져서 인공 뉴런에 보내지고,각 입력값과 그에 해당되는 가중치의 곱의 전체 합이 임계치(threshold)를 넘으면 종착지에 있는 인공 뉴런은 출력 신호로서 1을 출력하고, 그렇지 않을 경우에는 0을 출력합니다. 이러한 함수를 계단 함수(Step function)라고 한다.


활성화 함수(Activation Function)

뉴런에서 출력값을 변경시키는 함수
계단 함수, 시그모이드 함수, 소프트맥스 함수


단층 퍼셉트론(Single-Layer Perceptron)

값을 보내는 단계과 값을 받아서 출력하는 두 단계로만 이루어져있다. 이때 이 각 단계를 보통 층(layer)라고 부르며, 이 두 개의 층을 입력층(input layer)과 출력층(output layer)이라고 한다.
단층 퍼셉트론은 AND 게이트, NAND 게이트, OR 게이트 또한 구현할 수 있다. 하지만 XOR 게이트는 구현이 불가능하다. 그 이유는 단층 퍼셉트론은 직선 하나로 두 영역을 나눌 수 있는 문제에 대해서만 구현이 가능하기 때문이다.


다층 퍼셉트론(MultiLayer Perceptron, MLP)

MLP

심층 신경망(Deep Neural Network, DNN)
은닉층이 2개 이상인 신경망


딥러닝

퍼셉트론이 정답을 출력할 때까지 가중치를 바꿔보면서 맞는 가중치를 찾았다. 즉, 가중치를 수동으로 찾았다. 하지만 이제는 기계가 가중치를 스스로 찾아내도록 자동화시켜야하는데, 이것이 머신 러닝에서 말하는 학습(training) 단계이다. 선형 회귀와 로지스틱 회귀와 같이 손실 함수(Loss function)와 옵티마이저(Optimizer)를 사용한다. 그리고 만약 학습을 시키는 인공 신경망이 심층 신경망일 경우에는 이를 심층 신경망을 학습시킨다고 하여 딥러닝(Deep Learning)이라고 한다.



역전파(BackPropagation)

순전파(Forward Propagation)

진행방향 ->

각 입력은 입력층에서 은닉층 방향으로 향하면서 각 입력에 해당하는 가중치와 곱해지고, 결과적으로 가중합으로 계산되어 은닉층 뉴런의 시그모이드 함수의 입력값이 된다.


역전파(BackPropagation)

진행방향 <-

순전파가 입력층에서 출력층으로 향한다면 역전파는 반대로 출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트한다.
이를 계산하기 위해 미분의 연쇄 법칙(Chain rule)을 사용한다.



비선형 활성화 함수(Activation function)

활성화 함수의 특징 - 비선형 함수(Nonlinear function)

입력을 받아 수학적 변환을 수행하고 출력을 생성하는 함수이다.
시그모이드 함수나 소프트맥스 함수는 대표적인 활성화 함수이다.

인공 신경망의 능력을 높이기 위해서는 은닉층을 계속해서 추가해야 한다. 그런데 만약 활성화 함수로 선형 함수를 사용하게 되면 은닉층을 쌓을 수가 없다.


시그모이드 함수(Sigmoid function)와 기울기 소실

시그모이드 함수를 사용한 인공 신경망인공 신경망의 학습과정
입력에 대해서 순전파(forward propagation) 연산을 하고, 그리고 순전파 연산을 통해 나온 예측값과 실제값의 오차를 손실 함수(loss function)을 통해 계산하고, 그리고 이 손실(loss)을 미분을 통해서 기울기(gradient)를 구하고, 이를 통해 역전파(back propagation)를 수행한다.

시그모이드 함수의 문제점
미분을 해서 기울기(gradient)를 구할 때 발생한다.
주황색 부분은 기울기를 계산하면 0에 가까운 아주 작은 값이 나오게 된다. 그런데 역전파 과정에서 0에 가까운 아주 작은 기울기가 곱해지게 되면, 앞단에는 기울기가 잘 전달되지 않게 됩니다. 이러한 현상을 기울기 소실(Vanishing Gradient) 문제라고 한다.
시그모이드 함수를 사용하는 은닉층의 개수가 다수가 될 경우에는 0에 가까운 기울기가 계속 곱해지면 앞단에서는 거의 기울기를 전파받을 수 없게 된다. 다시 말해 매개변수 W가 업데이트 되지 않아 학습이 되지않는다.
시그모이드 함수는 원점 중심이 아니어서 시그모이드 함수는 항상 양수를 출력하기 때문에 출력의 가중치 합이 입력의 가중치 합보다 커질 가능성이 높다. 이를 편향 이동(bias shift)이라 한다.
결론적으로 시그모이드 함수를 은닉층에서 사용하는 것은 지양된다.


하이퍼볼릭탄젠트 함수(Hyperbolic tangent function

하이퍼볼릭탄젠트 함수(tanh)는 입력값을 -1과 1사이의 값으로 변환한다.
시그모이드 함수와는 달리 0을 중심으로 하고 있는데, 이 때문에 시그모이드 함수와 비교하면 반환값의 변화폭이 더 크다. 그래서 시그모이드 함수보다는 기울기 소실 증상이 적은 편이다.


렐루 함수(ReLU)

수식은 f(x)=max(0,x)이다.
음수를 입력하면 0을 출력하고, 양수를 입력하면 입력값을 그대로 반환한다.
특정 양수값에 수렴하지 않으므로 깊은 신경망에서 시그모이드 함수보다 훨씬 더 잘 작동한다.
렐루 함수는 시그모이드 함수와 하이퍼볼릭탄젠트 함수와 같이 어떤 연산이 필요한 것이 아니라 단순 임계값이므로 연산 속도도 빠르다.

문제점
입력값이 음수면 기울기도 0이 된다. 이 문제를 죽은 렐루(dying ReLU)라고 한다.


리키 렐루(Leaky ReLU)

죽은 렐루를 보완하기 위해 만들어진 변형 함수이다.
Leaky ReLU는 입력값이 음수일 경우에 0이 아니라 0.001과 같은 매우 작은 수를 반환한다.
수식은 f(x)=max(ax,x)이다.


소프트맥스 함수(Softamx function)

소프트맥스 함수는 시그모이드 함수처럼 출력층의 뉴런에서 주로 사용된다. 시그모이드 함수가 이진 분류 (Binary Classification) 문제에 사용된다면 소프트맥스 함수는 다중 클래스 분류(MultiClass Classification) 문제에 주로 사용된다.



과적합(Overfitting)을 막는 방법들

데이터의 양을 늘리기

모델은 데이터의 양이 적을 경우, 해당 데이터의 특정 패턴이나 노이즈까지 쉽게 암기하기 되므로 과적합 현상이 발생할 확률이 늘어난다. 그렇기 때문에 데이터의 양을 늘릴 수록 모델은 데이터의 일반적인 패턴을 학습하여 과적합을 방지할 수 있다.


모델의 복잡도 줄이기

복잡도는 은닉층(hidden layer)의 수나 매개변수의 수 등으로 결정된다.


가중치 규제(Regularization) 적용하기

복잡한 모델이 간단한 모델보다 과적합될 가능성이 높다. 그리고 간단한 모델은 적은 수의 매개변수를 가진 모델이다. 복잡한 모델을 좀 더 간단하게 하는 방법으로 가중치 규제(Regularizaiton)가 있다.


드롭아웃(Dropout)

드롭아웃은 학습 과정에서 신경망의 일부를 사용하지 않는 방법이다. 드롭아웃의 비율을 0.5로 한다면 학습 과정마다 랜덤으로 절반의 뉴런을 사용하지 않고, 절반의 뉴런만을 사용한다.
드롭아웃은 신경망 학습 시에만 사용하고, 예측 시에는 사용하지 않는 것이 일반적이다. 학습 시에 인공 신경망이 특정 뉴런 또는 특정 조합에 너무 의존적이게 되는 것을 방지해주고, 매번 랜덤 선택으로 뉴런들을 사용하지 않으므로 서로 다른 신경망들을 앙상블하여 사용하는 것 같은 효과를 내어 과적합을 방지한다.



기울기 소실(Gradient Vanishing)과 폭주(Exploding)

** Gradient Vanishing / Exploding


Solutions

  • Change activation function
  • Careful initialization
  • Small learning rate
  • Batch Normalization

가중치 초기화(Weight initialization)

Restricted Boltzmann Machine

  • 세이비어 초기화(Xavier Initialization)
  • He 초기화(He initialization)

배치 정규화(Batch Normalization)

배치 정규화는 인공 신경망의 각 층에 들어가는 입력을 평균과 분산으로 정규화하여 학습을 효율적으로 만든다.

내부 공변량 변화(Internal Covariate Shift)
공변량 변화는 훈련 데이터의 분포와 테스트 데이터의 분포가 다른 경우를 의미한다.
내부 공변량 변화는 신경망 층 사이에서 발생하는 입력 데이터의 분포 변화를 의미한다.

배치 정규화(Batch Normalization)
한 번에 들어오는 배치 단위로 정규화하는 것을 말한다. 배치 정규화는 각 층에서 활성화 함수를 통과하기 전에 수행된다. 배치 정규화를 요약하면 입력에 대해 평균을 0으로 만들고, 정규화를 한다. 그리고 정규화 된 데이터에 대해서 스케일과 시프트를 수행한다.배치 정규화는 학습 시 배치 단위의 평균과 분산들을 차례대로 받아 이동 평균과 이동 분산을 저장해놓았다가 테스트 할 때는 해당 배치의 평균과 분산을 구하지 않고 구해놓았던 평균과 분산으로 정규화를 한다.


배치 정규화(Batch Normalization) 특징

  • 배치 정규화를 사용하면 시그모이드 함수나 하이퍼볼릭탄젠트 함수를 사용하더라도 기울기 소실 문제가 크게 개선된다.
  • 가중치 초기화에 훨씬 덜 민감해진다.
  • 훨씬 큰 학습률을 사용할 수 있어 학습 속도를 개선시킨다.
  • 미니 배치마다 평균과 표준편차를 계산하므로 훈련 데이터에 일종의 잡음을 넣는 부수 효과로 과적합을 방지하는 효과도 낸다. 하지만 부수적 효과이므로 드롭 아웃과 함께 사용하는 것이 좋다.

배치 정규화의 한계

  • 배치 정규화는 모델을 복잡하게 하며, 추가 계산을 하는 것이므로 테스트 데이터에 대한 예측 시에 실행 시간이 느려집니다. 그래서 서비스 속도를 고려하는 관점에서는 배치 정규화가 꼭 필요한지 고민이 필요하다.
  • 미니 배치 크기에 의존적이다.
    너무 작은 배치 크기에서는 잘 동작하지 않을 수 있다.
  • RNN에 적용하기 어렵다.

층 정규화(Layer Normalization)



0개의 댓글