본문 바로가기
데이터분석 및 데이터엔지니어/통계 및 분석 이론 정리

딥러닝 관련 이론 정리 - 인공지능 자격증 대비 관련

by na.__.na 2021. 11. 29.

01. 딥러닝 개요

딥러닝 : 머신러닝의 여러 방법론 중 하나로, 인공신경망에 기반하여 컴퓨터에게 사람의 사고방식을 가르치는 방법

인공신경망 : 생물학의 신경망에서 영감을 얻은 학습 알고리즘으로 사람의 신경 시스템을 모방함

 

# 현대의 다양한 딥러닝 기술 적용 사례

  • 얼굴 인식 카메라
  • 기계 번역 모델
  • 알파고 제로

02. 퍼셉트론

 

  • 신경망 이전에는 사람이 직접 패턴을 파악해서 예측하는 형태였음 (얼굴 인식, 숫자 및 문자 인식)
  • 1958년 초기 신경망 퍼셉트론 등장

 

y = activation(w0 + w1x1 + w2x2)

  • w0 : bias
  • x1, x2 : 입력 값
  • w1, w2 : 가중치
  • 0 또는 1을 출력 → 이것을 얼마나 잘 분류하느냐가 매우 중요

 

 

  • 퍼셉트론은 선형 분류기로써 데이터 분류가 가능함

 

03. 다층 퍼셉트론

  • 비 선형적인 문제를 해결하기 위해 등장
  • 단층 퍼셉트론은 입력층과 출력층만 존재하지만, 다층 퍼셉트론은 단층 퍼셉트론을 여러 층 쌓은 것을 말함
    • 히든층 : 입력층과 출력층 사이의 모든 레이어
      • 히든층이 많이진다면,
        • 깊은 신경망이라는 의미의 '딥러닝'이라는 단어 사용
        • 분류 성능이 향상하여 성능이 좋아진다는 장점이 있음
        • 가중치가 너무 많아진다는 단점이 있음

 

 

04. 딥러닝 모델의 학습 방법

  • 가중치(weight) : 노트간의 연결 강도, 신호에 대한 강도, 선으로 표시
  • Node/Uint : 각 층을 구성하는 요소
  • 레이어(Layer) : 모델을 구성하는 층

 

  • 딥러닝 모델의 학습 방법
    • 예측값과 실제값 간의 오차값을 최소화하기 위해 오차값을 최소화하는 모델의 인자를 찾는 알고리즘 적용
    • 목적 : Loss function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘 적용하는 것

 

  • 순전파(Forwardpropagation) : 입력값을 바탕으로 출력 값을 점진적으로 계산하는 과정
    • 순전파를 사용하면, 예측값과 실제값 간의 오차값을 구하여 Loss function을 구할 수 있음
    • 이후, 경사하강법을 통해 최적화할 수 있음
    • 모델에 따라 적절한 활성화 함수 사용이 중요함
      • 계단함수
      • 시그모이드
      • Tanh
      • ReLU
      • softmax

 

  • 경사하강법 : 가중치를 Loss function 값이 작아지도록 점진적으로 업데이트하는 방법
    • 가중치는 Gradient 값을 사용하여 업데이트 수행
    • Gradient 값은 각 가중치마다 정해지며, 역전파(Backpropagation)를 통해 구할 수 있음

 

  • 역전파 : 순전파와 반대 방향으로 이루어지는 과정
    • Gradient 값을 구하기 위해선 그 전단의 계산 값이 필요함
    • 아래 과정을 수행하여 가중치들을 업데이트 할 수 있으며, 이를 반복하여 Loss function을 제일 작게 만드는 가중치를 구함

 

  • 딥러닝 모델의 학습 순서
    1. 학습용 feature 데이터를 입력하여 예측값 구하기 (순전파)
    2. 예측값과 실제값 사이의 오차 구하기 (Loss 계산)
    3. Loss를 줄일 수 있는 가중치 업데이트 하기 (역전파)
    4. 1 ~ 3번을 반복하며 Loss를 최소로하는 가중치 얻기 → Loss가 계속 줄어드는데, 더 이상 줄어들지 않을때까지 반복

 

05. 텐서플로우로 딥러닝 구현하기

  • 텐서플로우(TensorFlow) : 유연하고, 효율적이며, 확장성 있는 딥러닝 프레임워크

 

    • 딥러닝 모델 구현 순서
      1. 데이터 전 처리
        • 텐서플로우 딥러닝 모델은 Tensor 형태의 데이터를 입력 받음
        • Tensor : 다차원 배열로서 텐서프롤우에서 사용하는 객체
        • 데이터 전 처리하기 : tf.data.Dataset

          # pandas를 사용하여 데이터 불러오기
          df = pd. read_csv (‘data.csv')
          feature = df. drop (columns=[‘label'])
          label = df[‘label’]
          
          # tensor 형태로 데이터 변환
          dataset = tf.data.Dataset.from_tensor_slices((feature.values, label.values))
          
          # dataset의 batch 사이즈를 32 로 설정
          dataset = dataset. batch(32)
        • 한 번에 넣지 않고, 배치로 나누어 넣음 → 성능은 안좋을 수 있으나, 속도가 빠름. 계속 로드를 줄일 수 있음
        • 딥러닝에 사용하는 데이터는 추가적인 전 처리 작업이 필요함
          • Epoch : 한 번의 epoch는 전체 데이터 셋에 대해 한 번 학습을 완료한 상태
          • Batch : 나눠진 데이터 셋 (보통 mini-batch라고 표현)
          • iteration는 epoch를 나누어서 실행하는 횟수를 의미
      2. 딥러닝 모델 구축
        • Keras : 텐서플로우의 패키지로 제공되는 고수준 API. 딥러닝 모델을 간단하고 빠르게 구현 가능
        • 코드예시
          # 모델 클래스 객체 생성
          tf.keras.models.Sequential()
          
          # 모델의 각 Layer 구성
          tf.keras.layers.Dense(units, activation)
          
          # units 레이어 안의 Node 의 수
          # activation : 적용할 activation 함수 설정​
           
          model = tf. keras.models.Sequential([
          	tf.keras.layers.Dense(10, input_dim=2, 'sigmoid'), #2개의 입력 변수 , 10개의 노드
          	tf.keras.layers.Dense(10, sigmoid’), #10 개의 노드
          	tf.keras.layers.Dense(1, activation='sigmoid'), #1 개의 노드
          ])
           
          # 모델에 Layer 추가하기
          [model].add(tf.keras.layers.Dense(units, activation))
          
          # units 레이어 안의 Node 의 수
          # activation : 적용할 activation 함수 설정
           
          model =tf. keras.models.Sequential() 
          
          model.add(tf.keras.layers.Dense (10, input_dim=2, activation='sigmoid’)) 
          model.add(tf.keras.layers.Dense (10, activation='sigmoid’)) 
          model.add(tf.keras.layers.Dense (1, activation='sigmoid’)​​
      3. 모델 학습
        • 코드 예시
          #모델 학습 방식을 설정하기 위한 함수
          [model].compile(optimizer, loss)
          
          # optimizer : 모델 학습 최적화 방법
          # loss : 손실 함수 설정
          
          # 모델을 학습시키기 위한 함수
          [model].fit(x, y)
          
          # x : 학습 데이터 (feature)
          # y : 학습 데이터의 label

          # MSE를 loss 로 설정 , 최적화 방식은 SGD 사용
          model.compile(loss='mean_squared_error', optimizer='SGD') 
          # dataset에 저장된 데이터를 입력하고 , epochs를 100으로 설정하고 학습 
          model.fit(dataset, epochs=100)​


      4. 평가 및 예측
        • 코드 예시
          # 모델을 평가하기 위한 메소드
          [model].evaluate(x, y)
          
          # x : 테스트 데이터
          # y : 테스트 데이터의 label
          
          # 모델로 예측을 수행하기 위한 함수
          [model].predict(x)
          
          # x : 예측하고자 하는 데이터

          # MSE를 loss 로 설정 , 최적화 방식은 SGD 사용
          model.compile(loss='mean_squared_error', optimizer='SGD')
          # dataset에 저장된 데이터를 입력하고 , epochs 를 100 으로 설정하고 학습
          model.fit(dataset, epochs=100)
          
          #모델 평가 및 예측하기
          model.evaluate(X_test Y_test)
          predicted_labels_test = model. predict(X_test)​

06. 이미지 처리를 위한 데이터 전 처리

  • 이미지 처리 기술 예시
    • 얼굴인식 카메라
    • 화질개선
    • 이미지 자동 태깅

 

  • 이미지 전 처리
    • 모두 같은 크기를 갖는 이미지로 통일
      • 해상도 통일
      • 색 통일

07. 이미지 처리를 위한 딥러닝 모델 

  • 합성곱 신경망(CNN) : 작은 필터를 순환시키는 방식으로 이미지의 패턴이 아닌 특징을 중점으로 인식
    • 입력 이미지의 특징을 추출, 분류하는 과정으로 동작
    • 이미지에서 어떠한 특징이 있는지를 구하는 과정
    • 필터가 이미지를 이동하며 새로운 이미지(피쳐맵)를 생성
    • Padding : 원본 이미지의 상하좌우에 한 줄 씩 추가
    • Striding : 필터를 이동시키는 거리 설정
    • Pooling Layer : 이미지의 왜곡의 영향(노이즈)를 축소하는 과정
    • 마지막 계층에 반드시 Softmax 활성화 함수 사용

 

  • Convolution Layer는 특징을 찾아내고, Pooling Layer는 처리할 맵(이미지) 크기를 줄여줌 : 이를 N번 반복
  • 반복할 때마다 줄어든 영역에서의 특징을 찾게 되고, 영역의 크기는 작아졌기 때문에 빠른 학습이 가능해짐

 

  • 합성곱 신경망 기반 다양한 이미지 처리 기술
    • Object detection & segmentation 
    • Super resolution (SR)

 

08. 자연어 처리를 위한 데이터 전 처리

  • 자연어 처리 예시
    • 기계 번역 모델
    • 음성 인식
  • 자연어 처리 과정
    1. 자연어 전 처리
      • 원 상태 그대로의 자연어는 전처리 과정이 필요함
        • 오류교정(Noise canceling) : 자연어 문장의 스펠링 체크 및 띄어쓰기 오류 교정
        • 토큰화(Tokenizing) : 문장을 토큰으로 나누고, 토큰은 어절, 단어 등으로 목적에 따라 다르게 정의
        • 불용어 제거(StopWord removal) : 불필요한 단어를 의미하는 불용어 제거
      • Bag of Words : 자연어 데이터에 속해있는 단어들의 가방
      • 토큰 시퀀스 : Bag of Words에서 단어에 해당되는 인덱스로 변환
        • 모든 문장의 길이를 맞추기 위해 기준보다 짧은 문장에는 패딩을 수행
        • 패딩(Padding) : 통일을 위해 쓸모없는 값 사용. 가장 긴 길이에 맞춤 (단, 지나치게 혼자 긴 문장은 무시)
    2. 단어 표현(Word Embendding)
    3. 모델 적용하기(Modeling)

 

09. 자연어 처리를 위한 딥러닝 모델

  • 단어 표현(Word Embendding) : 단순하게 Bag of Words의 인덱스로 정의된 토큰들에게 의미를 부여하는 방식
  • 기존 다층 퍼셉트론 신경망의 자연어 분류 방식 : 자연어 문장을 기존 MLP 모델에 적용시키기에는 한계가 있음 → 합치는 과정에서 대괄호가 사라져 관계가 사라지게 되기 때문 → RNN으로 극복

 

  • 자연어 분류를 위한 순환 신경망(RNN) : 기존 퍼셉트론 계산과 비슷하게 X 입력 데이터를 받아 Y를 출력
  • 순환 신경망의 입출력 구조
    • 출력 값을 두 갈래로 나누어 신경망에게 '기억'하는 기능을 부여
  • 임베딩은 토큰의 특징을 찾아내고, RNN이 전 토큰의 영향을 받으며 학습

 

  • 순환 신경망 기반 다양한 자연어 처리 기술
    • Image captioning
    • Chat bot
  •