딥러닝

chkkkky·2024년 8월 11일

퍼셉트론

  • 인공신경망의 기초가 되는 가장 간단한 형태의 알고리즘 중 하나
  • 입력(features)에 대해 가중치(weights)를 곱한 후, 이들의 합에 활성화 함수(activation function)를 적용하여 출력(output)을 생성
  • 퍼셉트론의 목표는 학습 데이터셋을 바탕으로 가중치를 조정하는 것이며, 이를 통해 주어진 입력 데이터를 두 개의 클래스 중 하나로 분류

주요이슈

  1. XOR 문제
    단일 레이어 퍼셉트론의 근본적인 결함을 보여준다
  • 선형적으로 분리 가능한 문제(예: AND 또는 OR 연산)를 처리할 수 있지만 단일 라인으로 입력을 두 클래스로 분리할 수 없는 XOR과 같은 선형으로 분리할 수 없는 문제로 인해 어려움을 겪었다

=> 다중 퍼셉트론 : 최소 한 개 이상의 은닉층을 포함하여 입력과 출력을 비선형적으로 변환하게

  1. 오차 역전파
    다층 네트워크의 효율적인 훈련을 가능하게 했다
  • 이는 체인 규칙에 따라 각 가중치에 대한 손실 함수의 기울기를 계산하여 네트워크를 통해 출력 계층에서 입력 계층으로 오류를 효과적으로 "전파"하는 방식으로 작동한다(경사 하강법의 원리 사용)
  • 이 방법을 사용하면 네트워크 출력의 전체 오류를 최소화하는 방식으로 가중치를 조정할 수 있다

<<순전파>>

  • 입력 데이터는 신경망의 각 층을 순차적으로 통과하며서, 각 뉴런의 가중치와 활성화 함수를 통해 처리
  • 마지막 층에서의 출력값은 신경망의 예측값이 됨

<<역전파>>

  • 신경망의 예측값과 실제값 사이의 오차를 계산
  • 이 오차를 바탕으로, 오차 함수의 기울기(미분값)를 계산하고, 이 기울기 정보를 신경망을 거슬러 올라가며 전달
  • 각 층의 가중치는 계산된 기울기를 사용하여 조정. 이 과정은 신경망의 예측 오차를 줄이는 방향으로 가중치를 업데이트

** 편미분
다변수 함수에서 한 변수에 대한 도함수를 구하는 과정
다른 변수들은 상수로 취급

=> 다변수함수가 특정 변수에 대해 어떻게 변화하는지 파악 가능

** 경사하강법
비용함수(손실 함수)의 값을 최소화하기 위해 사용되는 최적화 알고리즘

=> 함수의 기울기(경사)를 계산하고, 그 기울기가 감소하는 방향으로 파라미터 업데이트

  1. 그라데이션 소멸 문제
    네트워크가 깊어짐에 따라 훈련 중에 레이어를 통해 다시 전파됨에 따라 기울기가 점점 더 작아지는 기울기 소멸 문제에 직면. 이로 인해 초기 레이어의 가중치를 업데이트하기가 어려워지고 딥 네트워크 훈련 속도가 느려지거나 심지어 중단되기도 한다
  • 대체 활성화 함수(예: ReLU) 도입, 정규화 기술 및 특수 네트워크 아키텍처(예: 순환 네트워크용 LSTM)와 같은 혁신이 이 문제를 완화하는 데 도움이 되었다
  • 활성화 함수의 선택은 네트워크가 복잡한 패턴을 학습하는 능력에 중요한 역할을 한다
  • 초기 네트워크는 간단한 계단 함수를 사용했지만 입력과 출력 간의 비선형 매핑을 학습할 수 있는 비선형 함수로 대체되었다
  • 일반적인 활성화 함수에는 Sigmoid, tanh 및 ReLU(Rectified Linear Unit)가 포함. 각각에는 고유한 장점과 사용 사례가 있으며, ReLU와 그 변형(예: Leaky ReLU, ELU)은 Vanishing Gradient 문제를 완화하는 효율성과 효과로 인해 딥 러닝에서 특히 인기가 있다

==========================================================

[모델구축]

Tensorflow, Keras

딥러닝을 효율적이고 쉽게 구현할 수 있도록 다양한 기능을 갖추고 있는 딥러닝 프레임워크

  • TensorFlow: 딥러닝 모델을 정의하고 구축할 수 있는 다양한 API를 제공
    고수준 API(tf.keras)와 저수준 API를 통해 다양한 모델을 유연하게 설계 가능

  • Keras: TensorFlow 위에서 작동하는 고수준 API로, 사용자가 간단하고 직관적으로 모델을 정의할 수 있게 도와줌
    직관적인 레이어 기반의 접근 방식을 사용해 빠르게 모델을 구축 가능

[모델 구축 방법]

  1. Sequential API
    가장 간단한 형태의 모델 생성법 중 하나

레이어를 순차적으로 쌓아 올리는 방식으로 각 레리어는 바로 이전 레이어의 출력을 입력으로 받아 처리

단순한 순차적 구조를 가진 신경망에 적합

ex) model = Sequential([
Input(shape=28*28,)),
Dense(32, activation='relu'),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])

  1. 함수형 API

더 복잡한 모델 아키텍처 구성 가능

다중 입력 및 출력, 공유 레이어(동일한 레이어를 여러번 사용), 레이어 간
복잡한 연결 구조 등을 정의 가능
각 레이어의 입출력을 명시적으로 정의함으로 달성

ex) input_shape = (28,28)
    input_layer = Input(shape=input_shape, name='input_layer')
    x = Flatten()(input_layer)

hidden1 = Dense(128,activation='relu', name='hidden_layer_1')(x)
hidden2 = Dense(64, activation='relu',name='hidden_layer_2')(hidden1)

output_layer = Dense(10, activation='softmax',name='output_layer')(hidden2)

model = Model(inputs=input_layer, outputs=output_layer)

[활성화 함수]

  • ReLU : 계산 효율성이 높으면서도 비선형성이 도입되어 훈련 중에 모델이 빠르게 수렴
  • sigmoid : 이 활성화 함수는 0과 1 사이의 값을 출력하므로 이진 분류 문제에 적합
  • softmax : 각 클래스에 대한 확률을 얻기 위해 분류기의 출력 레이어에서 자주 사용되는 소프트맥스 함수는 여러 클래스에 대한 확률 분포를 출력
  • Tanh(하이퍼볼릭 탄젠트) : 시그모이드와 비슷하지만 -1과 1 사이의 값을 출력

[옵티마이저]
손실을 줄이기 위해 가중치, 학습률 등 신경망의 속성을 변경하는 데 사용되는 알고리즘 또는 방법

  • SGD(확률적 경사하강법) : 가장 간단한 최적화 프로그램 중 하나. 각 훈련 예제를 개별적으로 사용하여 모델의 가중치를 업데이트

  • 모멘텀 : 관련 방향을 따라 탐색하여 SGD를 가속화하고 현재 업데이트 벡터에 과거 단계의 업데이트 벡터의 일부를 추가하여 높은 곡률 방향의 진동을 완화

  • Adagrad : 학습 속도를 매개변수에 맞게 조정하여 자주 발생하는 기능과 관련된 매개변수에 대해 더 작은 업데이트를 수행하고, 자주 발생하지 않는 기능과 관련된 매개변수에 대해 더 큰 업데이트를 수행

  • RMSprop : 가중치에 대한 학습률을 해당 가중치에 대한 최근 기울기 크기의 이동 평균으로 나눈다

  • Adam : AdaGrad 및 RMSprop 알고리즘의 최상의 속성을 결합하여 노이즈 문제에 대한 희소 기울기를 처리할 수 있는 최적화 알고리즘을 제공

[비용함수]

  • 평균제곱오차(MSE) : 회귀 문제에 사용
  • 이진 교차엔트로피 : 이진 분류에 사용 / 두 확률 분포, 즉 실제 레이블 분포와 예측 확률 사이의 거리를 측정
  • 범주형 교차엔트로피(categorical_crossentropy) : 레이블이 원-핫 인코딩되는 다중 클래스 분류 문제에 사용
  • 희소 범주형 교차엔트로피(sparse_categorical_crossentropy) : 범주형 교차엔트로피와 유사하지만 레이블이 정수인 경우에 사용

[배치 크기]
모델 학습 프로세스의 한 번의 반복에서 활용되는 학습 예제의 수

[epochs]
학습 알고리즘이 전체 훈련 데이터세트에서 작동하는 횟수가 결정

** 배치 크기 & 에포크 관계
배치 크기와 에포크 수는 신중하게 균형을 맞춰야 하는 신경망 훈련의 두 가지 기본 하이퍼파라미터

=====================================================

  • 입력 데이터가 1차원 벡터로 이미 변환한 상태
    Input(shape(28*28)),

  • 2차원 입력 이미지를 1차원 벡터로 평탄화
    Flatten(input_shape(28,28))

  • 픽셀의 최대 정수가 255
    255로 나누면 0 과 1로 정규화 가능

0 : 검정
255 : 흰색

  • 신경망의 입력 형식 : 신경망의 완전 연결된 레이어에서는 입력이 1D 벡터일 것으로 예상
    => 이미지 "평탄화" 수행

=======================================================

CNN : 이미지의 공간 계층 구조 캡쳐 가능 -> 이미지 처리 작업에 적합

[CNN 아키텍처]

  • 컨볼루션 레이어(Conv2D) : 컨볼루션 작업을 수행하여 이미지에서 공간 특징을 캡처
  • 풀링 레이어(MaxPooling2D) : 다음 컨벌루션 레이어에 대한 입력 볼륨의 공간 크기(높이 및 너비)를 줄인다. 이는 계산 부하와 메모리 사용량을 줄이고 표현의 추상화된 형식을 제공하여 과적합을 줄이는 데 사용
  • 밀집 레이어(완전 연결 레이어) : 여러 컨볼루션 및 풀링 레이어 이후 신경망의 상위 수준 추론은 컨볼루션 레이어에서 추출하고 평면화한 특징을 기반으로 분류를 수행하는 Dense 레이어를 통해 수행

[ callback ]

callbacks=[early_stopping_callback, checkpointer]

학습 과정 중에 특정 이벤트가 발생했을 때, 취할 행동을 정의

  • early_stopping_callback: 이 콜백은 모델의 성능이 더 이상 개선되지 않을 때 학습을 조기에 중단하도록 설정
    ex) 검증 데이터에 대한 손실이 일정 기간 동안 개선되지 않으면 학습을 멈춤
    이는 과적합을 방지하고 학습 시간을 단축시키는 데 도움이 됨

  • checkpointer: 이 콜백은 모델의 중간 학습 상태를 파일로 저장하여, 학습 과정에서 가장 좋은 모델을 보존할 수 있게 함
    이를 통해 나중에 모델을 재사용하거나, 학습 과정이 끝난 후 최적의 모델 상태로 복원할 수 있다

0개의 댓글