[Deep Learning] Neural Networks basics

zekim·2021년 4월 27일
0

[Deep-Learning Basics]

목록 보기
1/1
post-thumbnail

Deep Learning / Machine Learning / AI

인공지능(AI)는 두가지 개념, 머신러닝과 딥러닝으로 요약할 수 있다. 다양한 문헌들에서 머신러닝과 딥러닝은 대부분 같이 사용되지만, 이 둘을 구별할 필요가 있다.
AI, 머신러닝, 딥러닝의 관계를 도식화해보면 다음과 같다.

먼저, 이 둘을 관계를 보면 딥러닝은 머신러닝의 하위 개념이다. Wikipedia에서 정의하는 머신러닝과 딥러닝의 개념은 다음과 같다.

Deep learning : Deep learning (also known as deep structured learning) is part of a broader family of machine learning methods based on artificial neural networks with representation learning. Learning can be supervised, semi-supervised or unsupervised.

Machine Learning : Machine learning (ML) is the study of computer algorithms that improve automatically through experience and by the use of data.[1] It is seen as a part of artificial intelligence.

이처럼 딥러닝은 머신러닝의 하위 개념이며, 둘 다 데이터를 통해 학습이 진행되게 된다. 머신러닝과 딥러닝의 가장 큰 차이점은 feature engineering이다. Feature engineering은 원하는 결과를 얻기위해서 적절한 feature을 선택하는 과정, 추출된 특징들을 바탕으로 새로운 특징을 생성하는 과정을 말한다. 머신러닝에서는 feature engineering을 사람이 manual하게 진행해주어야하지만, 딥러닝은 이를 자체적으로 학습하게 된다. 또한, 대부분의 머신러닝 모델들은 여러개의 step으로 구성된다. 예를 들어, object detection(객체 검출)과 같은 task 에서 'grabcut'과 같은 bounding box detection(경계 탐지)를 사용하여 이미지를 탐지한 후 검출된 객체들 중에서 SVM(Support Vector Machine)과 같은 객체 인식 알고리즘을 사용하여 객체를 인식하게 된다. 하지만, 딥러닝은 이러한 과정을 1-step, end-to-end로 진행하게 된다. 대표적인 모델로 Faster R-CNN이나 YOLO와 같은 알고리즘이 있다.

이를 바탕으로 다양한 딥러닝 알고리즘이 제시가 되고 있으며, 대부분의 알고리즘은 신경망을 바탕으로 구성되어 있다.

Artificial Neural Networks(인공신경망)

Artificial Neural Networks(ANN)은 인간의 뇌를 구성하는 가장 기본적인 단위인 Neurons(뉴런)에서 착안되었다. 뉴런은 전기 신호, 자극을 받아 임계값을 넘게 되면 다음 뉴런에 신호를 전달하는 과정을 반복하게 된다. 이와 마찬가지로 ANN도 input data를 받아 weight, bias, activation function을 거쳐서 계산된 output을 다음 뉴런의 input으로 전달하게 된다.
bias를 제외한 weight으로만 구성된 2-hidden layer ANN을 그려보면 아래와 같다 :

layer을 지나면서 얻는 값은 다음과 같다 :

weight이 곱해져서 나온 uu값에 activation function(Relu, Sigmoid, tahn etc)를 계산하여 최종적인 output 값을 얻고, 이 값이 다음 layer의 input으로 들어가게 된다.

초기 ANN의 다양한 문제들이 해결되면서 현재는 hidden layer을 여러 층 쌓아서 구성된 DNN을 주로 사용하게 된다. DNN은 Deep Neural Network의 약자로, 은닉층을 2개 이상 지닌 학습 방법을 뜻한다.

인공신경망에는 weight과 bias라는 learnable parameter가 존재하며, 이들은 학습 과정동안 학습이 진행되며 이는 loss를 통해 해당 weight의 gradient가 계산이 되고, 이를 바탕으로 weight이 업데이트 되게 된다. 이러한 과정을 바탕으로 Neural Network는 점점 task에 적합한 학습이 이루어지게 되는 것이다.

Loss

위에서 설명한 것처럼 Neural Network내의 parameter들은 loss를 통해 업데이트 되며, task에 맞는 loss function(손실함수)가 존재한다. 이 중 MSE(Mean Squared Error)와 Cross-Entropy에 대해서 간단하게 설명해본다.

  • Mean Squared Error, MSE(평균 제곱 오차):
    주로 연속형 변수를 예측할 때 사용한다.
    loss = 1N(yy^)2{-1\over N} \sum{(y-\hat y)}^2 , yy : 실제 값 y^\hat y : 예측값

  • Cross Entropy:
    classification task에 주로 사용된다.
    이진 분류 : binary crossentropy / 다중 분류 : categorical cross entropy
    loss - ylogy^-\sum{y log{\hat y}} , yy : 실제 값 y^\hat y : 예측값

이를 제외하고도 다양한 loss function들이 존재하며, weight들이 loss value에 의해서 업데이트 되기 때문에 적절한 loss function을 설정하는 것이 중요하다.

Overfitting/Regularization

모델을 학습하기 위해서 Dataset을 일반적으로 세 종류로 나누게 된다. training, validation, 그리고 test. 학습을 진행하다 보면 overfitting 현상이 발생하게 된다. overfitting이란 말 그대로 과적합이며 이는 모델이 training set에만 맞게 과도하게 학습이 되는 현상이다. overfitting이 발생하게 되면 학습하는 동안 accuracy가 상당히 높지만, 학습이 완료된 모델을 불러와 test set에 evaluation을 진행하면 performance가 매우 낮은 값으로 구해지게 된다. 일반적으로 overfitting은 training, validation, test셋을 나누는 과정에서 data inbalance가 발생해 일어날 수도 있어 세 데이터를 balance있게 맞춰준다면 해결될 수 있다.
하지만, 이러한 이유가 아닌경우 다음의 방법으로 overfitting을 해결 할 수 있다

  • Adding L1/L2-norm in loss function
    1) L1 regularization : L1 regularization은 대부분의 가중치(weights)을 0으로 만들어 모델이 sparse해지게 된다. 이는 어떤 feature들이 모델에 영향을 주는지 정확히 판단 가능하게 된다.
    2) L2 regularization : L1 regularization과 달리 가중치(weights)들의 제곱을 최소화하므로, 가중치의 값이 완전히 0이 되기보다는 0에 가까워진다.
  • dropout
    학습 전 dropout ratio를 정해 미니배치마다 각 layer에서 해당 확률만큼 neuron의 활성을 멈추게 한다. 따라서 매 미니배치마다 다른 architecture을 학습하게 된다. 이를 통해 어느 특정 neuron이 큰 가중치를 가지게 되는 것을 방지하며, ensemble(앙상블)효과가 있다.
  • early stopping
    목표했던 학습 횟수에 도달하기 전 loss value가 converge하게 되면 학습을 중단하는 기법이다.

참조
[1] https://blogs.nvidia.co.kr/2016/08/03/difference_ai_learning_machinelearning/

1개의 댓글

comment-user-thumbnail
2021년 9월 24일

감사합니다. 이 글을 읽고 순전파 역전파에 대한 이해를 바탕으로 비염이 치료되었습니다.

답글 달기