Development Project

[ 2021 NIPA AI - 응용 ] 2. 딥러닝 시작하기 (01~05) + α 본문

AI/Edu

[ 2021 NIPA AI - 응용 ] 2. 딥러닝 시작하기 (01~05) + α

나를 위한 시간 2021. 12. 13. 00:58

01 퍼셉트론(Perceptron)

  • 단층 퍼셉트론
    • 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘
    • 입력층과 출력층만 존재
    • 각 입력값이 가중치와 곱해져 인공뉴런에 보내지고, 각 입력값과 그에 해당되는 가중치 곱의 전체 합이 임계치(threshold)를 넘으면 종착지에 있는 인공뉴런은 출력 신호로서 1을 출력하고 아니라면 0을 출력함
    • 퍼셉트론은 선형 분류기로써 데이터 분류 가능함
  • 다층 퍼셉트론 (Multi Layer Perceptron, MLP)
    • 단층 퍼셉트론을 여러 개 쌓은 것
    • 입력층과 출력층 사이의 모든 Layer를 Hidden Layer라 하는데, 히든층이 많아진다면 Deep Learning이라 함
    • 최종 출력값과 실제값의 오차가 최소화되도록 가중치와 바이어스를 계산하여 결정함

02 텐서플로우와 신경망

  • 딥러닝 모델
    • 구성 요소
    • 학습 방법
      • 예측값과 실제값 간의 오차값을 최소화하기 위해 오차값을 최소화하는 모델의 인자를 찾는 알고리즘 적용
      • Loss Function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘을 적용
      • 예측값 구하기
        • 가중치 업데이트 과정
          1. 학습용 Feature 데이터를 입력하여 예측값 구하기 (순전파)
          2. 예측값과 실제값 사이의 오차 구하기 (Loss함수)
          3. Loss를 줄일 수 있는 가중치 업데이트 하기
          4. 1~3번 반복으로 Loss를 최소로 하는 가중치 얻기
            • 위 과정을 수행하여 가중치들을 업데이트 할 수 있으며, 이를 반복하여 Loss Function을 제일 작게 만드는 가중치를 구함
        • 순전파 (Forward Propagation) : 입력 값을 바탕으로 출력 값을 계산하는 과정 
          • 순전파를 사용하면 예측값과 실제값 간의 오차값을 구하여 Loss Function을 구할 수 있음
        • 역전파 (Back Propagation)
          • Input값과 Output값을 알고 있는 상태에서 신경망을 학습시키는 방법
    • 구현 순서
      1.  데이터 전 처리하기
        • Tensorflow 딥러닝 모델
          • Tensor 형태의 데이터(다차원 배열)로 변환 
            • # 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))
            • Tensorflow에서 사용하는 객체인 Tensor 형태를 입력받아야 하므로 변환
          • 데이터의 세분화 작업
            • Epoch
              • 전체 데이터를 반복적으로 학습하는 횟수
              • 한번의 학습만으로 모델이 완성되었다고 보기 어려우므로, 반복적인 학습을 통해 높은 정확도를 가지는 모델을 만들 수 있음
              • Epoch횟수를 너무 크게하면 과적합(Overfitting)이 발생 가능
            • Batch
              • dataset = dataset.batch(32)
                 
              • 한번에 학습할 데이터의 수
              • 전체 데이터를 메인메모리에 적재하는 것은 어려우므로, 데이터를 잘게 나눈어서 메모리에 잭재시켜 학습
              • Batch를 너무 작게하면 Iteration이 증가하여 학습시간이 오래소모
            • Iteration
              • 한 Epoch에서 Batch를 학습하는 횟수, Epoch를 나누어서 실행하는 횟수
              • Gradient의 이동 폭이 커서 Global Minimum을 지나칠 수 있으므로 Gradient를 조금씩 반복적으로 이동하게 하는 역할
      2. 딥러닝 모델 구축하기
        • Keras : 텐서플로우의 패키지로 제공되는 고수준 API로, 딥러닝 모델을 간단하고 빠르게 구현 가능
          • 모델 구축 코드 예_1
            • # 모델 클래스 객체 생성
              model = tf.keras.models.Sequential([
              # 모델의 각 Layer 구성
              tf.keras.layers.Dense(10, input_dim = 2, activation = 'sigmoid'),	#2개의 입력변수, 10개의 노드
              tf.keras.layers.Dense(10, activation = 'sigmoid'),	#10개의 노드
              tf.keras.layers.Dense(10, activation = 'sigmoid'),	#1개의 노드
              ])
            • 첫번째 즉, Input Layer는 입력 형태에 대한 정보가 필요 ( input_shape / input_dim 인자 ) 
          • 모델 구축 코드 예_2
            • 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. 모델 학습시키기 
        • # 모델 학습 방식을 설정
          # MSE(손실 함수)를 loss로 설정, 최적화 방식은 SGD 사용
          model.compile(loss='mean_squared_error', optimizer='SGD')
          
          # 모델을 학습 = dataset에 저장된 데이터를 입력하고, epochs를 100으로 설정하고 학습
          # x : 학습 데이터 / y : 학습 데이터의 label
          model.fit(dataset, epochs=100)
      4. 평가 및 예측하기
        • # 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)

03 다양한 신경망

  • 이미지 처리
    1. 데이터 전 처리하기
      • 모두 같은 크기를 갖는 이미지로 통일
        • 가로 / 세로 / 픽셀 사이즈를 표현하는 해상도 통일
        • 색을 표현하는 방식 통일 (RGB, HSV, Gray-scale, Binary, ...)
    2. 딥러닝 모델 구축하기
      • 합성곱 신경망(Convolution Neural Network, CNN)
        • 개념 
          • 작은 필터를 순환시키는 방식 - 이미지의 패턴이 아닌 특징을 중점적으로 인식함
        • 구조
          • 입력 이미지의 특징을 추출, 분류하는 과정으로 동작
            1. Convolution Layer 
              • 이미지에서 어떠한 특징이 있는지를 구하는 과정으로, 필터가 이미지를 이동하며 새로운 이미지(피쳐맵)을 생성
            2. Pooling Layer 
              • 이미지 왜곡의 영향(노이즈)를 축소하는 과정 
            3. Fully Connected Layer
              • 추출된 특징을 사용하여 이미지를 분류 (Softmax 활성화 함수 사용)
  • 자연어 처리
    1. 데이터 전 처리하기
      • 오류 교정
        • 자연어 문장의 스펠링 체크 및 띄어쓰기 오류 교정
      • 토큰화
        • 문장을 토큰(어절, 단어 등으로 목적에 따라 다르게 정의)으로 나눔
      • 불용어 제거
        • 불필요한 단어를 제거
      • 토큰 시퀀스
        • Bag of Words에서 단어에 해당되는 인덱스로 변환 / 모든 문장의 길이를 맞추기 위해 Padding 수행
          • Bag of Words
            • 자연어 데이터에 속해있는 단어들의 가방 구성
    2. 딥러닝 모델 구축하기
      • 순환 신경망(Recurrent Neural Network, RNN)
        • 기존 퍼셉트론 계산과 비슷하게 X입력 데이터를 받아 Y를 출력하지만 출력값을 두 갈래로 나누어 신경망에게 기억하는 기능을 부여하므로, 토큰 간의 순서와 관계를 적용할 수 있는 모델
        • 임베딩 => RNN => 활성함수
          • 임베딩은 토큰의 특징을 찾아내고, RNN이 전 토큰의 영향을 받으며 학습함

 

 

 

Comments