AI - DL

Deep Learning

  머신러닝 딥러닝
활용 데이터 형태 정형 데이터 비정형 데이터
데이터 의존도 데이터가 적어도, 적정 수준의 성능 확보 가능 데이터가 적으면, 성능이 좋지 않음
하드웨어 의존도 저사양 하드웨어에서 실행 가능 고사양 하드웨어(GPU) 필요
설명력 회귀분석, 의사결정 나무 등 설명력이 강점인 방법론이 있음 모델 내부 연산 논리에 대해 추론이 어려움
문제 해결 방법 분석가가 임의로 문제를 여러 단계로 나누어 해결 End-to-End 방식으로 입력부터 출력까지 분석가의 개입 없이 가능
특징(Feature) 추출 도메인 지식 또는 분석가의 의견이 반영되어 생성(Feature Engineering) 딥러닝 네트워크 내부에서 스스로 학습(Feature Extraction)

 

  • 비정형 데이터의 경우 일반적으로 높은 차원의 형태
  • 차원이 높은 만큼 모델을 잘 학습시키기 위해서는 대용량 데이터가 필수이며 딥러닝은 내부가 복잡하고 연산량이 많기 때문에 고사양 하드웨어가 필요

딥러닝 발전 과정

  • 뇌의 기본 단위인 뉴런의 역할을 하는 Perceptron
  • 데이터를 입력 받아 가중치와 입력값을 조합하여 다음 퍼셉트론으로 전달하는 구조
  • 인공신경망은 퍼셉트론 여러 개가 모여 복잡한 업무를 수행하는 네트워크 구조라고 할 수 있으며 딥러닝은 인공신경망을 더 크고 깊게 확장한 것

출처 : https://jellyho.com/blog/47/

 

  • Activation Function은 뉴런처럼 합산된 신호 값을 활성화시켜 다음 퍼셉트론으로 넘겨줄 것인지를 결정
  • 가장 간단한 활성 함수는 합산된 신호 값이 특정 임계치보다 크면 1을 출력하고, 아니면 0을 출력하는 Step Function
  • 퍼셉트론은 간단한 선형 분류 문제만 풀 수 있는데, 복잡한 문제를 해결하기 위해 MLP(Multi-Layer Perceptron) 사용

Multi-Layer Perceptron

  • Input Layer : 입력 데이터를 받는 Layer
  • Hidden Layer : 이전 Layer 의 출력과 가중치 곱의 합을 입력받음으로써 Activation Function이 적용된 Layer
  • Output Layer : 다층 퍼셉트론에서 최종 결과를 얻는 Layer

출처 : https://hwk0702.github.io/ml/dl/deep%20learning/2020/07/09/MLP/

 

  • 입력층은 입력 변수의 개수만큼, 출력층은 예측 변수의 개수만큼의 Node를 가짐
  • 은닉층의 각 Node 에서 퍼셉트론 연산이 적용되기 때문에 다층 퍼셉트론에서 Layer와 Node 수가 증가할수록 더욱 복잡한 문제를 풀 수 있음
  • 다층 퍼셉트론은 Feed Forward, Back Propagation을 반복하면서 가중치를 추정
  • 입력층에서 출력층의 방향으로 연산하는 것을 Feed Forward
  • 출력층에서 입력층의 방향으로 오차를 줄일 수 있게 가중치를 조정하는 과정을 Back Propagation
  • 갖고 있는 모든 데이터에 대해 Feed Forward와 Back Propagation을 한 번씩 진행한 것을 Epoch

인공신경망 핵심 알고리즘

Mini-Batch

  • 데이터가 클수록 계산량이 많아지고 하드웨어의 메모리 한계 -> Mini Batch 사용

출처 : https://allensdatablog.tistory.com/entry/Mini-batch-%ED%95%99%EC%8A%B5-%EB%8C%80%EC%9A%A9%EB%9F%89-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EB%8B%A4%EB%A3%A8%EA%B8%B0

Gradient Descent Method

  • Back Propagation 과정에서 오차를 줄이는 방향으로 가중치를 업데이트하는 방식
  • Loss function의 위치에서 가장 기울기가 가파른 방향으로 학습 Parameter를 Update
  • Learning Rate는 임의로 정하는 Hyperparameter로서 너무 작게 설정한 경우에는 Local Mininum에 빠져 최적의 가중치를 얻지 못할 수 있음
  • 너무 크게 설정하면 Overshooting 되어 Loss function이 발산하므로 학습이 이루어지지 않을 수 있음

출처 : https://bioinformaticsandme.tistory.com/130

  • Gradient에 Learning Rate를 곱해 원래 가중치에서 빼면서 가중치를 조정하는 것으로 해석

  • Global Mininum Loss function 의 가중치를 원함
  • Adam(Adaptive Moment Estimation) 방법을 많이 사용함

Activation Function

  • 인공신경망이 성능이 좋은 이유 중 하나는 Non-Linear Function을 사용하기 때문임.
  • 인공신경망의 성능을 향상시키기 위해서는 여러 개의 은닉층을 추가
  • 여러 은닉층의 효과를 보기 위해서는 Non-Linear Function을 사용하여야 함.
  • Perceptron 은 특정 임계치 이상이 되면 신호가 전달되는 Step Function을 사용했지만, 인공신경망에서는 가중치를 찾는 과정에서 미분이 필요하므로 임계치 부분에서 미분이 불가능한 Step Function 사용 불가
  • Sigmoid Function을 도입했지만, Gradient Vanishing 문제 발생

출처 : https://dnd.or.kr/ViewImage.php?Type=F&aid=630796&id=F2&afn=196_DND_17_3_83&fn=_0196DND

 

  • 많은 연구에서는 Gradient Vanishing 극복하고자 미분 가능한 여러 Activation Function 사용 -> ReLU, ELU 등의 함수 사용

Output Function

  • 출력 함수는 마지막 출력층의 결과를 목적에 맞는 적절한 형태로 변형해주는 역할
  • 회귀 문제이면 입력값을 그대로 출력하는 Identity Function, 분류 문제면 Softmax Function을 사용
  • Softmax Function 은 입력값을 0에서 1 사이로 정규화하여 출력값의 총합을 항상 1로 만든다. 즉, K개의 클래스가 있을 때 각 클래스로 분류될 확률 출력

Dropout

  • 인공신경망은 Layer와 Nod가 많아질수록 모델이 복잡해져 Ovefitting이 일어날 수 있음
  • Dropout 은 과적합을 방지하는 Regularization과 모델을 Ensemble
  • Node를 끄면 연결된 가중치가 사용되지 않으므로 학습할 Parameter 수가 줄면서 일반화된 모델 생성 가능
  • 각 배치를 학습할 때마다 랜덤하게 Node가 선택되기 때문에 특정 조합에 너무 의존적으로 학습되는 것을 방지하며, 인공신경망을 앙상블하여 사용하는 것 같은 효과를 줌

출처 : http://itsys.hansung.ac.kr/lec/ai/practice/Dropout.slides_euckr.html

 

Batch Normalization

  • 여러 개의 은닉층을 통과하면서 입력 분포가 매번 변화하는 문제를 Internal Covariance Shift
  • 학습 과정을 불안정하게 하여 가중치가 엉뚱한 방향으로 Update 되는 원인
  • Batch Normalization 은 각 Layer 에서 Activation Function 을 통과하기 전 정규화를 통해 활성 함수 이후에도 어느 정도 일정한 분포가 생성되도록 하여 Internal Covariance Shift 해결
  • 활성 함수의 비선형성이 반영되지 않기 때문에 Scale(y)과 Shift(B) Parameter를 통해 최적의 분포로 한 번 더 변환하여 활성 함수 통과
  • 학습과 예측 과정에서 다르게 수행됨
  • 예측 과정에서는 데이터가 개별로 들어올 수도 있고 테스트 데이터에 따라 평균과 분산이 매번 달라지기 때문에 테스트 데이터의 평균과 분산을 사용하지 않음
  • 각 반복 학습 과정에서 구한 평균과 분산을 이동 평균을 통해 저장해 두었다가 예측 단계에서 사용
  • 이유는 랜덤으로 초기화된 가중치로 인한 불안정한 단계보다는 학습이 어느 정도 지나 안정 단계의 평균과 분산을 더 반영하기 위함

출처 : https://gaussian37.github.io/dl-concept-batchnorm/

 

고급 딥러닝 기술

CNN (Convolutional Neural Network)

  • CNN은 이미지나 영상을 다루는 Computer Vision에서 가장 대표적으로 사용되는 인공신경망
  • 정형 데이터는 데이터베이스 시스템의 테이블과 같이 고정된 Column 과 Observation(객체) 의 관계로 구성되어있음.
  • Image는 사람의 눈으로는 한 장의 사진처럼 보이지만 컴퓨터가 읽을 때는 Pixel 단위의 숫자 행렬로 이루어짐.
  • 다층 퍼셉트론의 입력층 Node 수는 정형 데이터의 입력 변수 개수와 같음.
  • Image는 입력 변수라는 개념이 없음에도 불구하고, 정형 데이터로 바꾸기 위해서는 행렬을 1차원의 벡터로 펼처주어야 한다.
  • Pixel 하나는 정형 데이터의 입력 변수 역할
  • 행렬을 정형 데이터의 행으로 풀면서 이미지가 갖는 고유의 특성인 공간적 정보(Spatial Feature)를 잃어버리게 됨.
  • Image를 정형 데이터로 변환하는 순간 행렬이 벡터로 변환되면서 공간적 정보가 사라지게 됨.
  • 정형 데이터를 입력으로 받는 다층 퍼셉트론의 단점을 CNN은 이미지 그대로 입력을 받음으로써 극복할 수 있음.

CNN 구조

  • Convolutional Layer : 이미지의 공간적 정보를 학습
  • Pooling Layer : Convolutional Layer의 차원 형태의 크기를 줄임으로써 학습 Parameter 개수를 감소
  • Fully Connected Layer : 최종 출력을 위한 다층 퍼셉트론 구조

출처 : https://www.dtaq-media.kr/content/%EA%B8%B0%EC%88%A0%EB%A1%9C-%ED%92%88%EC%A7%88%EB%A1%9C?id=173

 

Convlutional Layer

  • CNN에서 가장 핵심이 되는 부분으로 이미지의 중요한 지역 정보(Region Feature)를 뽑는 역할
  • Image에 Filter(또는 Kernel)를 적용하여 Convolution(합성곱 연산)을 수행함.
  • Filter가 입력 이미지를 훑으면서 겹치는 부분의 각 원소를 곱하여 모두 더한 값을 출력하는 연산

출처 : https://viso.ai/deep-learning/convolution-operations/

  • Filter가 적용되는 음영 영역을 Receptive Field 라고 하고, 이 합성곱 연산을 통해 나온 행렬을 Feature Map
  • Filter는 CNN에서 학습할 가중치로써 다층 퍼셉트론과 마찬가지로 초기에는 랜덤으로 주어지며 Loss Function가 줄어드는 방향으로 학습
  • CNN 내부에서는 다양한 Filter를 적용한 Feature Map으로 이미지의 여러 정보를 결합하여 분류를 잘하도록 학습이 진행
  • HyperParameter로는 Filter의 크기, Stride와 Padding 사용 여부가 있음
  • Filter 크기 : Filter 높이와 너비
  • Stride : Filter를 움직이는 간격
  • Padding : Convolution을 수행하면 크기가 줄어드는 것을 방지하고자 입력 이미지 외각에 임의의 값(0 또는 이미지의 최외각과 동일한 값)을 부여하는 기술
  • Stride : Filter가 입력 이미지를 순회할 때 움직이는 단위
  • Stride가 클수록 Feature Map은 작아지므로 CNN을 구현할 때 주로 Stride = 1로 설정
  • Padding으로 이미지 가장자리에 임의의 값이 설정된 픽셀을 추가함으로써 입력 이미지와 Feature Map의 크기를 같게 만듬.

Pooling Layer

  • Convolutional Layer로 계산된 Feature Map의 크기를 줄여 연산량을 줄이는 역할
  • 대표적인 방법 : Max Pooling, Average Pooling으로 최대 또는 평균을 취함
  • Pooling Layer는 인접한 픽셀 중 중요한 정보만 남기는 강조 효과, 단순 계산만 진행하기 때문에 학습할 가중치가 따로 없음
  • Convolution Layer에 적용할 필요는 없으며 선택 사항임.

출처 : https://nico-curti.github.io/NumPyNet/NumPyNet/layers/maxpool_layer.html

Fully Connected Layer

  • CNN은 회귀, 분류 모두에 적용할 수 있으며 다층 퍼셉트론과 마찬가지로 최종 출력값은 분류 문제이면 각 클래스에 대한 예측 확률 벡터, 회귀 문제면 예측값 벡터임.
  • 고차원의 Feature Map이 출력값의 형태인 1차원 벡터로 변환되기 위해 Flatten Layer를 거치게 됨.
  • Fully Connected Layer는 Flatten Layer를 통과한 벡터를 출력값의 길이로 변환시키는 역할
  • Layer를 많이 쌓는 것은 Overfitting 및 학습 속도를 늦추는 원인이 됨.

Recurrent Neural Network (RNN)

  • RNN은 Speech Recognition, NLP과 같이 순차적 데이터에 사용되는 대표적인 Algorithm으로, LSTM (Long Short-Term Memory)와 Gated Recurrent Unit (GRU)의 근간이 되는 모델
  • 인공신경망과 CNN은 Feed-forward Neural Network.
  • RNN은 Tanh Function Activation Function 을 사용하여 다음과 같이 표현.
  • 은닉층으로 구한 값은 문제의 목적에 맞는 활성 함수를 적용하여 최종 출력값으로 반환

출처 : https://inbig.github.io/ml/2020/11/12/m8.html

  • One to Many : Image Captioning (이미지를 설명할 수 있는 문장을 생성하는 문제)
  • Many to One : Sentiment Classification (텍스트에서 정보를 추출하여 감정, 태도를 파악하는 감성 분석)
  • Many to Many : 동영상의 각 이미지 프레임별 분류
  • Delayed Many to Many : Machine Translation (입력된 언어를 다른 언어로 변환하는 기계 번역)

Long Short-Term Memory (LSTM)

  • RNN에서 입력과 출력 시점이 멀어질수록 학습이 잘 안되는 현상 : Long-Term Dependency Problem
  • 과거의 정보를 은닉층에 저장하는 것인데, 이로 인해 매 시점이 지날수록 가중치와 활성 함수가 누적되어 곱해지기 때문에 과거의 정보가 점점 잊혀지는 것.

출처 : https://docs.likejazz.com/lstm/

 

  • LSTM은 RNN 구조에 몇 가지 기능을 추가하여 Long-Term Dependency Problem 해결
  • Forget Gate는 "과거 메모리를 얼마나 기억할 것인가"에 대한 의사결정을 해주는 Gate -> Sigmoid Function Activation Function 적용하여 0에서 1 사이의 값을 출력하는 Forget Gate 표현
  • Input Gate는 "현재 정보를 과거 메모리에 얼마큼 더할 것인가"에 대한 의사결정을 하는 Gate -> Sigmoid Function과 Tanh Function Activation Function가 적용된 두 개의 Module
  • Cell state는 Element-wise (원소별) 벡터 연산이 수행됨.
  • Output Gate를 통해 현재 시점의 출력을 구함 -> Sigmoid Function Activation 함수를 적용
  • 연산 속도가 느리다는 단점이 존재

Reinforcement Learning (강화 학습)

  • 미지의 환경에서 Agent가 임의의 행동 (Action)을 했을 때 받는 Reward 통해 먼 미래의 누적 보상을 최대화하고자 어떠한 행동을 할 것인지를 학습하는 Algorithm

출처 : https://blog.quantylab.com/rl.html

 

요소 정의
상태(State) 에이전트가 처할 수 있는 상황 및 정보
행동(Action) 에이전트가 취할 수 있는 행동
보상(Reward) 에이전트가 행동을 선택했을 때, 환경으로부터 받는 보상값
할인율 (Discount Factor) 미래 보상을 현재 보상 가치로 환산해주는 요소

 

  • Agent : 시작점을 출발하여 여러 행동을 통해 특정 상태에 도달하게 될 것
  • Reward Function : t 시점에서 Agent가 상태 s에서 행동 a를 취했을 때 받을 수 있는 즉각적인 보상의 기댓값
  • State-Value Function : Agent가 t 시점일 때 상태 s에서의 가치, 즉 현재 상태에서 앞으로 일련의 행동을 시행하면 받을 수 있는 누적 보상의 기댓값
  • Action-Value Function, Q-value : Agent가 t 시점의 상태 s에서 행동 a를 취했을 때, 앞으로 일련의 행동을 시행하면서 받을 수 있는 누적 보상 값의 기댓값, 상태-가치 함수에서 행동을 함께 고려한 함수
  • 각 함수를 기댓값으로 구하는 이유는 State Transition Probability 가 고려되기 때문임.
  • 모든 상태에 대해 Agent가 취할 행동을 정책(Policy, π) 라고 하며, 정책은 높은 가치 함수를 받는 방향으로 학습
  • Agent는 최적 정책에 따라 행동하면 보상의 합을 최대로 받을 수 있음
  • 단순하고 실제 환경(상태, 보상, 전이 확률 등)의 정보를 정확히 아는 경우는 거의 없음.
  • 강화학습 기법 : Monte-Carlo Policy Evaluation (몬테카를로 정책 평가), Temporal Difference Policy (시간 차 학습), SARSA(살사), Q-Learning, Deep Reinforcement Learning

Generative Adversarial Networks (GAN)

  • 데이터 생성이라는 새로운 분야
  • 데이터를 모방하여 새로운 데이터를 만드는 것
  • 두 개의 네트워크가 서로 목표를 달성하기 위해 적대적으로 겨루는 구조

출처 : https://thebook.io/080263/0712/

  • Generator (생성모델) 과 Discriminator (분류모델)이 겨루는 Network
  • Loss function은 Generator 와 Discriminator 의 상반된 목적을 풀기 위해 Minimax Problem 적용

  • Generator : Random noize z로 만들어낸 가짜 데이터 G(z)를 생성하여 가짜 데이터를 진짜 데이터로 분류할 확률 D(G(z))를 높게 예측하는 것
  • Discriminator

1) 실제 데이터 x를 입력받아 진짜 데이터로 분류할 확률 D(x)를 높게 예측하는 것

2) Generator가 만든 가짜 데이터 G(z)를 입력받아 진짜 데이터일 화귤 D(G(z))를 낮게 예측하는 것

  • Generator는 Loss function을 최소화하고 Discriminator는 최대화하는 방향으로 적대적으로 학습

'Data Engineer > AI' 카테고리의 다른 글

AI - 작물 잎 사진으로 질병 분류  (0) 2024.11.16
AI - Pytorch  (5) 2024.11.14
AI - ChatGPT API (Day 2)  (3) 2024.11.11
AI - ChatGPT API (Day 1)  (3) 2024.11.10
AI - ML  (3) 2024.11.05