딥러닝 주요 개념 간략 정리
Nov 01, 2023
![딥러닝 주요 개념 간략 정리](https://inblog.ai/_next/image?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%25EB%2594%25A5%25EB%259F%25AC%25EB%258B%259D%2520%25EC%25A3%25BC%25EC%259A%2594%2520%25EA%25B0%259C%25EB%2585%2590%2520%25EA%25B0%2584%25EB%259E%25B5%2520%25EC%25A0%2595%25EB%25A6%25AC%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3Dactafool&w=1920&q=75)
10.1 인공 신경망
- 인간의 생물학적 신경망과 유사한 구조를 갖는 인공 시스템
- 사람 뇌의 기본 단위 뉴런 구조에서 영감을 얻음
- 가지돌기 → 축삭돌기 → 축삭 말단
- 신호가 특정 값을 넘으면 잘 전달되고, 특정 값 이하면 전달되지 않음
- 뉴런 = 신호를 입력에서 출력으로 전달하는 역할
10.1.1 퍼셉트론
- 뉴런의 원리를 본떠 만든 인공 구조
- 여러 입력값을 받아 특정 값을 출력함
- 입력값(x1,x2,x3)과 가중치(w1,w2,w3)을 곱함
- 곱한 값들의 총합을 구함
- 총합이 0을 넘으면 1, 넘지 않으면 0을 출력
- 3번 단계에서 0 초과 여부에 따라 출력값을 결정하는 역할 = 활성화 함수
- 활성화 함수는 입력값을 최종적으로 어떤 값으로 변환해 출력할지 결정해줌
- 퍼셉트론은 입력값, 가중치, 활성화 함수로 이루어진 구조
- 훈련(또는 학습) : 원하는 출력값을 내보내도록 가중치를 조정해가는 작업
- 단순 퍼셉트론은 선형 분류 문제만 해결 할 수 있다는 한계점이 있음
- ⇒ 퍼셉트론을 여러 층으로 쌓아 다층 퍼셉르론을 통해 비선형 분류 문제를 해결 가능
10.1.2 신경망
- 신경망은 입력층, 은닉층(중간층), 출력층으로 구성
10.1.3 활성화 함수(activation funcion)
- 입력값을 어떤 값으로 변환해 출력할지 결정하는 함수
- 대표적인 활성화 함수로 시그모이드 함수와 ReLU 함수가 있음
- 시그모이드 함수
- S자 곡선을 그리는 수학 함수
- ReLU 함수
- 입력값이 0보다 크면 입력값을 그대로 출력하고, 0 이하이면 0 을 출력
- 활성화 함수로 시그모이드보다 대체로 성능이 좋아서 많이 활용됨
- Leaky ReLU 함수
- ReLU를 약간 변형한 함수로, 자주 쓰임
- 입력값이 음수일 때, 약간의 음숫값을 살려둠
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F9bd48dce-2e39-4da7-bc54-039d6d2cd970%252Ffb396750-1baf-40c3-a1e5-0b37e601f0b8%252FUntitled.png%3Ftable%3Dblock%26id%3D5a7473f1-0061-4680-9819-91c3f905bb86%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F9bd48dce-2e39-4da7-bc54-039d6d2cd970%252Ff9be38ab-0152-47ab-8a1f-5d93821c54ca%252FUntitled.png%3Ftable%3Dblock%26id%3Df7fee9ad-7d72-44bd-8923-c4b5feafc1d6%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F9bd48dce-2e39-4da7-bc54-039d6d2cd970%252Fe9d990be-4dcf-4675-9a43-8a8d52ccec93%252FUntitled.png%3Ftable%3Dblock%26id%3D1d2622f9-4668-44ac-b12a-7e9f0e994a2a%26cache%3Dv2&w=3840&q=75)
10.1.4 경사 하강법(Gradient Descent)
- 신경망 훈련의 목표 ⇒ 최적 파라미터(가중치와 편향)을 찾는 것
- 최적 파라미터 = 손실 함수가 최솟값일 때의 파라미터
- 손실 함수(loss function)
- 모델 성능이 얼마나 나쁜지를 측정하는 함수
- 모델로 예측한 값과 실젯값 차이를 구하는 함수
- 함수 값이 작을 수록 좋은 모델
- 대표적으로 평균 제곱 오차(Mean Squared Error, MSE)와 교차 엔트로피(Cross Entropy)가 있음
- 매 훈련마다 손실값이 줄어드는 방향으로 파라미터를 갱신하여 찾게 됨
경사 하강법의 일반적인 절차
1. 현재 위치에서 기울기(경사)를 구함
2. 기울기 아래 방향으로 일정거리(학습률)를 이동함.
3. 손실 함수가 최소가 될 때까지, 즉 기울기가 0이 될 때까지 1~2단계를 반복함
- 학습률(Learning Rate)
- 기울기 방향으로 얼만큼 이동할지 결정하는 값
- 학습률이 가중치를 한 번에 얼마나 갱신할지 결정하는 값
- 학습률에 따라 훈련 속도가 달라짐
- 학습률이 너무 크면 훈련 속도는 빠르지만, 최적 가중치를 찾지 못할 수 있음
- 학습률 이 너무 작으면 훈련 속도가 느려짐
- 보통 0.1~0.0001 범위의 값을 사용함
- 미니배치 경하 하강법
- 데이터를 미니배치 단위로 무작위로 추출해 경사 하강법을 수행
- 데이터 여러 개를 한 묶음으로 처리하므로 더 효율적
- 순전파(forward propagation)
- 입력값이 입력층 → 은닉층 → 출력층 도달하는 계산 과정
- 각 층을 통과할 떄마다 입력값에 가중치를 곱해 다음 층으로 출력값을 계산
- 역전파(back propagation)
- 순전파의 반대 개념
신경망 훈련 절차
1. 순전파를 진행하여 입력값으로부터 출력값(타깃 예측값)을 계산함
2. 순전파로 구한 타깃 예측값과 실제 타깃값의 차이 (손실)을 구함
3. 손실값을 줄이는 방향으로 가중치의 기울기를 구함 = 경사하강법
4. 기울기를 바탕으로 가중치를 갱신, 출력층 → 입력층 방향으로 차례로 가중치 갱신
5. 1~4단계 반복
10.2 합성곱 신경망(convolutional neural network, CNN)
- 컴퓨터 비전 분야에서 주로 쓰이는 신경망
- 다음과 같이 여러 구조가 모여 구성됨
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F9bd48dce-2e39-4da7-bc54-039d6d2cd970%252F41a6abf7-2bc3-44c3-ac3e-a1e188e0479e%252FUntitled.png%3Ftable%3Dblock%26id%3D00aae77d-b92a-40cb-9d6a-865a89f9fbc4%26cache%3Dv2&w=3840&q=75)
10.2.1 합성곱 계층(convolutional layer)
- 합성곱으로 이루어진 신경망 계층
- 합성곱(convolution)
- 2차원 데이터의 일정 영역 내 값들을 하나의 값으로 압축하는 연산
- 전체 영역에서 중요한 특징만 추출하는 효과
- 합성곱 연산에는 필터가 필요함
- 필터(filter)
- 입력 데이터에서 특정한 특성을 필터링하는 역할
- 특정 특성을 부각시키거나 약화시키는 등의 변화를 줌
- 요소별, 특징별 특성을 가져오는 역할
합성곱 연산 과정
- 서로 대응하는 행과 열에 적힌 숫자끼리 곱한 뒤 모두 더해줌
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F9bd48dce-2e39-4da7-bc54-039d6d2cd970%252F2202f8d1-cfdf-423e-9f2a-50fd1a882b12%252FUntitled.png%3Ftable%3Dblock%26id%3D783d02a9-fb89-4366-bac8-a99c7c0a872c%26cache%3Dv2&w=3840&q=75)
- 특성 맵, 피처 맵(feature map)
- 합성곱 연산의 결과
- 중요한 특징만 남아있게 된 결과
- 필터의 패턴과 일치하는 영역일 수록 숫자가 큼
- 합성곱 계층에서는 보통 여러 특성을 추출하기 위해 여러 필터를 사용함
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F9bd48dce-2e39-4da7-bc54-039d6d2cd970%252F6dd1b355-de68-4a97-86c9-161ed5db8ab5%252FUntitled.png%3Ftable%3Dblock%26id%3D6b893255-a71c-4fd2-8c14-46385727f64b%26cache%3Dv2&w=3840&q=75)
10.2.2 패딩과 스트라이드
- 4X4 크기의 입력 데이터에 3X3 크기의 필터를 적용하면 2X2의 피처맵이 만들어 짐
- 합성곱 연산은 데이터의 크기를 줄이게 되고, 여러 번 반복하면 더 이상 합성곱 연산을 적용하지 못함
- 입력 데이터 크기를 좀 더 키우면 해결 가능
- 패딩(padding)
- 입력 주변 데이터 주변을 특정 값으로 채워 입력 데이터 크기를 키우는 방법
- 보통 0으로 채움
- 스트라이드(stride)
- 합성곱 연산을 수행할 때 한 번에 이동하는 간격의 크기
- 스트라이드를 크게 설정하면 패처맵의 크기가 줄어듬
10.2.3 풀링(pooling)
- 특성 맵 크기를 줄여 이미지의 요약 정보를 추출하는 기능
- 합성곱과 다르게 필터가 필요 없음
- 특정 영역에서 최댓값이나 평균값을 가져와 요약 정보를 구하기 때문
- 풀링의 목적
- 특성 맵 크기를 줄여 연산속도를 빠르게 하기 위함
- 이미지에서 물체의 위치가 바뀌어도 같은 물체로 인식하기 위해
- 합성곱 연산은 물체 위치가 바뀌면 같은 물체로 인식하지 못함
- 풀링은 특정 영역의 요약 정보(대푯값)을 가져와서 위치가 약간 변해도 같은 물체로 판단함 = 위치 불변성(location invariance)
- 대표적으로 최대 풀링과 평균 풀링이 있음
- 최대 풀링
- 풀링 영역에서 가장 큰 값을 취하는 방법
- 특정 영역에서 가장 뚜렷한(밝은) 부분 추출
- 평균 풀링
- 풀링 영역의 평균값을 구하는 방법
- 특정 영역의 평균적인 특징 추출
10.2.4 전결합(fully-connected)
- 이전 계층의 모든 노드 각각이 다음 계층의 노드 전부와 연결된 결합
- 전결합 계층(fully-connected layer) 또는 밀집 계층(dense layer)
- 전결합으로 구성된 계층
- CNN에서는 보통 마지막 부분에서 구현함
- 앞의 합성곱과 풀링 계층이 이미지에서 특징을 뽑아내면 전결합 계층은 이 특성을 활용해 특정한 레이블로 분류하는 역할을 함
- 평탄화
- 합성곱 계층과 풀링 계층을 거친 2차원 데이터는 1차원으로 바꾼 뒤 전결합을 적용
- 평탄화한 1차원 데이터를 최종 출력값과 전결합하지 않고, 전결합 계층을 여러 개 만드는 이유?
- 분류를 더 효율적으로 하기 위해
10.2.5 합성곱 신경망 전체 구조
- 입력 데이터는 배치크기, 가로 픽셀 수, 세로 픽셀수 , 색상(채널 값)로 4차원 데이터를 다루게 됨
10.3 성능 향상을 위한 딥러닝 알고리즘
10.3.1 드롭아웃(dropout)
- 과적합을 방지하기 위해 신경망 훈련 과정에서 무작위로 일부 뉴런을 제외하는 기법
- 매 훈련 이터레이션마다 새롭게 적용
- 매 훈련마다 서로 다른 신경망을 훈련하는 꼴
- 여러 모델을 훈련하여 결과를 취합하는 앙상블 학습과 유사
- 드롭아웃 비율 0.2로 설정하면 전체의 20% 뉴런을 제외하게 됨
10.3.2 배치 정규화(batch normalization)
- 과적합 방지와 훈련 속도 향상을 위한 기법
- 내부 공변량 변화(internal covariate shift)를 해결하기 위한 기법
- 신경망 계층마다 입력 데이터 분포가 다른 현상
- 데이터가 정규분포(평균0, 분산1)을 따르도록 분포를 변환하는 작업
10.3.3 옵티마이저(optimizer)
- 신경망의 최적 가중치를 찾아주는 알고리즘
- 10.1.4의 경사 하강법(SGD)이 대표적인 예
- 모멘텀(Momentum)
- SGD에 물리학의 관성 개념을 추가
- 이전 단계의 진행 방향을 기억하여 일정 비율로 현 단계에 반영
- 지그재그 폭이 줄어드는 효과 → 더 빠르게 최적 파라미터에 수렴
- Adagrad
- 최적 파라미터에 도달할수록 학습률을 낮추도록 한 옵티마이저
- 적응적 학습률(adaptive learning rate)
- 최적점에서 멀 때는 학습률을 크게 잡아 빠르게 수렴
- 최적점에서 가까울 때는 학습률을 낮춰 최적점을 지나치지 않도록 함
- RMSProp
- Adagrad의 단점을 보완한 방법
- 훈련이 진행될 수록 학습률이 낮아져 0에 가까워져, 가중치 갱신이 되지 않음
- 적응적 학습률을 활용하지만, 최근 기울기만 고려해 학습률을 낮추는 방법
- 훈련을 오래 지속해도 학습률이 0에 수렴하지 않음
- Adam
- 딥러닝 모델을 설계할 때 가장 많이 사용하는 옵티마이저
- Momentum과 RMSProp의 장점을 결합한 방법
- 관성을 이용하며, 적응적 학습률을 적용함
10.3.4 전이 학습(transfer learning)
- 한 영역에서 사전 훈련된 모델(pretrained model)에 약간의 추가 학습을 더해 유사한 다른 영역에서도 활용하는 기법
- 처음 훈련하는 것보다 적은 데이터로 훨씬 빠르게 높은 성능치에 도달할 수 있음
- 전이 학습의 종류
- 신경망 전체를 다시 훈련하는 파인튜닝(fine tuning)
- 일부 계층만 다시 훈련하는 방법
Share article