이번 글에서는 프로그래머스 인공지능 데브코스의 9주차 강의에 대한 정리입니다.
1. 다층 퍼셉트론1
인공신경망과 생물신경망
- 사람의 뉴런: 두뇌의 가장 작은 정보 처리 단위
- 컴퓨터가 사람 뇌의 정보 처리를 모방하여 지능적 행위를 할 수 있는 인공지능 도전
- 뉴런의 동작 이해를 모방한 초기 인공 신경망 (ANN) 연구 시작
- 퍼셉트론이 고안됨
- 신경망의 종류
- 전방 (Forward) 신경망, 순환 (Recurrent) 신경망
- 얕은 (Shallow) 신경망, 깊은 (Deep) 신경망
- 결정론 (Deterministic) 신경망: 모델의 매개변수와 조건에 의해 출력이 완전히 결정되는 신경망
- 확률론 (Stochastic) 신경망: 고유의 임의성을 가지고 매개변수와 조건이 같더라도 다른 출력을 갖는 신경망
- 퍼셉트론: 절 (Node), 가중치 (Weight), 층 (Layer)과 같은 새로운 개념의 구조 도입
- 제시된 퍼셉트론 구조의 학습 알고리즘을 제안
- 깊은 인공신경망 (Deep Learning)을 포함한 현대 인공신경망의 토대
- 입력 (편향 노드 포함) -> 입력과 출력 사이의 연산 -> 출력
- 일반적인 분류기의 학습 과정
- 과업 정의와 분류 과정의 수학적 정의 (가설 설정)
- 해당 분류기의 목적함수 정의
- 목적함수를 최소화 하는 값을 찾기 위한 최적화 수행
- 경사하강법을 통해 기울기를 미분하여 반복 탐색해 극값을 찾음
2. 다층 퍼셉트론2
다층 퍼셉트론
- 퍼셉트론: 선형 분류기 (Linear Classifier)의 한계
- OR, AND 분류기는 가능하지만, XOR 문제는 해결하지 못함
- 다층 퍼셉트론의 핵심 아이디어
- 은닉층을 두어, 특징 공간을 분류하는데 유리한 새로운 특징 공간으로 변환
- 연성에서는 출력이 연속값이므로 시그모이드 함수를 활성화 함수로 도입
- 오류 역전파 알고리즘을 사용하여 한 층씩 그레디언트를 계산하고, 가중치를 갱신
- 특징 공간 변환
- 퍼셉트론 2개를 병렬 결합하면, 원래 공간을 새로운 특징 공간으로 변환 가능
- 추가 퍼셉트론 1개를 순차 결합하면, 다층 퍼셉트론이 됨
활성화 함수
- 딱딱한 공간 분할과 부드러운 공간 분할
- 계단 함수는 딱딱한 의사결정: 영역을 점으로 변환
- 그 외에 활성화 함수는 부드러운 의사결정: 영역을 영역으로 변환
- 로지스틱 시그모이드
- 하이퍼볼릭 탄젠트 시그모이드
- Softplus와 Rectifier (ReLU)
- 활성화 함수에 따른 다층 퍼셉트론의 공간 분할 능력 변화 (경성 부분 변화)
- 일반적으로 은닉층에서 로지스틱 시그모이드를 활성화 함수로 많이 사용
- S자 모양의 넓은 포화 곡선은 경사도 기반한 학습 (오류 역전파)을 어렵게 함
- 기울기 소실 (Gradient Vanishing) 문제 발생
- 따라서 깊은 신경망에서는 ReLU를 활용
- 계단 활성화 함수의 범위는 -1과 1
- 로지스틱 활성화 함수의 범위는 0부터 1
- 하이퍼볼릭 탄젠트 활성화 함수의 범위는 -1부터 1
- 소프트플러스, 렉티파이어 (ReLU) 활성화 함수의 범위는 0부터 무한대
구조
- 기존에는 입력층 -> 은닉층 -> 출력층의 2층 구조
- 입력층 -> 은닉층 -> 은닉층 -> 출력층의 3층 구조
- p개의 은닉 노드: p는 하이퍼 매개변수
- p가 너무 크면 과잉적합, 너무 작으면 과소적합
- 하이퍼 매개변수 (Hyper-paramenters) 최적화 필요
동작
- 특징 벡터 x를 출력 벡터 o로 사상 (Mapping) 하는 함수로 간주할 수 있음
- 2층 퍼셉트론: o = f2(f1(x))
- 3층 퍼셉트론: o = f3(f2(f1(x)))
- 은닉층은 특징 추출기
- 은닉층은 특징 벡터를 분류에 더 유리한 새로운 특징 공간으로 변환
- 현대 기계학습에서는 특징학습 (Feature Learning, Data-driven Learning) 이라 부름
- 심층학습은 더 많은 층을 거쳐 계층화 된 특징학습을 함
- 범용적 근사 이론 (Univeral Approximation Theorem)
- 하나의 은닉층은 함수의 근사를 표현
- 다층 퍼셉트론도 공간을 변환하는 근사 함수
- 얕은 은닉층의 구조: 일반적으로 깊은 은닉층의 구조가 좋은 성능을 가짐
- 입력층 -> 은닉층 (순방향 전파) -> 오차 계산 -> 은닉층 (역방향 전파) -> 오차 계산
- 학습 알고리즘은 오류 역전파를 반복하여 수행
성능 향상을 위한 경험의 중요성
- 순수한 최적화 알고리즘으로는 높은 성능이 불가능
- 데이터 희소성, 잡음, 미숙한 신경망 구조 등 때문
- 성능 향상을 위한 다양한 경험 (Heuristics)을 개발하고 공유함
- 아키텍쳐, 초깃값, 학습률, 활성화 함수
3. 다층 퍼셉트론3
목적 함수의 정의
- 훈련집합
- 특징 벡터 집합 (X)과 부류 벡터 집합 (Y) - 지도학습
- 부류 벡터는 단발성 (One-hot) 코드로 표현
- 기계학습의 목표: 모든 샘플을 옳게 분류하는 함수 f를 찾는 것
- 목적 함수: 평균 제곱 오차 (Mean Squared Error, MSE)
- 전방 전파와 오류 역전파
오류 역전파 알고리즘의 설계
- 연쇄 법칙의 구현: 반복되는 부분식들 (Subexpressions)을 저장하거나 재연산을 최소화
- 목적 함수의 최저점을 찾아주는 경사 하강법
- 출력의 오류를 역방향 (왼쪽)으로 전파하여 경사도를 계산하는 알고리즘 (오류 역전파 알고리즘)
미니배치 확률론적 경사 하강법
- 미니배치 방식
- 한번에 t개의 샘플을 처리 (t는 미니배치 크기)
- 미니배치 방식은 보통 수십 ~ 수백
- 경사도의 잡음을 줄여주는 효과 때문에 수렴이 빨라짐
- GPU를 사용한 병렬처리에도 유리함
- 현대 기계학습은 미니배치 기반의 확률론적 경사 하강법을 표준처럼 널리 사용
4. 심층 학습 기초 1
심층 학습 (Deep Learning)
- 다층 퍼셉트론에 은닉츠을 여러 개 추가하면, 깊은 신경망이 됨 (심층 학습은 깊은 신경망의 학습)
- 심층 학습은 새로운 응용을 창출하고, 인공지능 제품의 성능을 획기적으로 향상 (현대 기계학습 주도)
- 1980년대 이미 깊은 신경망 아이디어는 등장했으나, 당시에는 실현 불가능
- 경사 소멸 (Gradient Vanishing) -> 활성화 함수 변화를 통해 해결
- 작은 훈련 집합, 과다한 연산과 시간 소요 (낮은 연산의 범용 컴퓨터, 값 비싼 슈퍼 컴퓨터)
- 일부 연구자들은 실망스러운 상황에서도 지속적인 연구
- 학습률에 따른 성능 변화 양상
- 모멘텀과 같은 최적 탐색 방법 모색
- 은닉 노드 수에 따른 성능 변화
- 데이터 전처리의 영향, 활성함수의 영향, 규제 기법의 영향
- 심층 학습의 성공 배경
- 혁신적 알고리즘 등장 (합성곱 신경망, CNN 구조)
- 경사 소멸 문제 해결을 위한 ReLU 활성 함수
- 과잉 적합을 방지하는데 효과적인 다양한 규제 기법
- 층별 예비 학습 (Pretraining) 기법 개발
- 값싼 GPGPU 등장, 학습 데이터 양과 질의 향상
표현 학습의 부각
- 전통적인 다층 퍼셉트론 (은닉층은 특징 추출기)
- 얕은 구조이므로 가공하지 않은 획득한 원래 패턴을 그대로 입력하면 낮은 성능
- 따라서 사람이 수작업 특징을 선택하거나, 추출하여 신경망에 입력
- 현대 기계학습 (심층학습)
- 학습에 의해 자동적으로 데이터로붵 특징 추출 (표현 학습 = Representation Learning)
- 특징 벡터를 신경망의 입력 (종단간 학습 = End-to-End Learning)
- 깊은 신경망을 통한 계층적 표현 학습
- 깊은 신경망의 표현 학습 (특징 학습)
- 낮은 단계 은닉층은 선이나 모서리 같은 간단한 저급 특징 추출
- 높은 단계 은닉층은 추상적 형태의 복잡한 고급 특징 추출
- 표현 학습이 강력해져서 기존 응용에서 획기적인 성능 향상
- 영상 인식, 음성 인식, 언어 번역 등
- 새로운 응용 창출 (화소 수준의 영상 분할, CNN과 LSTM의 혼합 학습 모델 등)
깊은 다층 퍼셉트론 (깊은 신경망)
- 깊은 다층 퍼셉트론의 구조와 동작
- 입력 (d+1 차원의 특징 벡터)과 출력 (c개 분류)
- L-1개의 은닉층 (입력층은 0번째 은닉층, 출력층은 L번째 은닉층으로 간주)
- DMLP (Deep Multi-Layers Perceptron)의 가중치 행렬
- DMLP의 동작: MLP의 동작을 나타내는 식을 보다 많은 단계로 확장한 것
- DMLP 학습은 기존 MLP 학습과 유사 (경사도 계산, 가중치 갱신을 더 많은 층에서 수행)
깊은 다층 퍼셉트론의 학습
- 주요 알고리즘의 개선 및 합성곱 신경망 (CNN)의 부상
- 구조: 퍼셉트론 -> 다층 퍼셉트론 -> 깊은 다층 퍼셉트론
- 활성함수: 계단 함수 -> 시그모이드 함수 -> ReLU와 변형
- 목적함수: 평균 제곱 오차 -> 평균 제곱 오차 -> 교차 엔트로피 또는 로그우도
심층 학습은 왜 강력한가?
- 종단간 최적화 된 학습 가능
- 고전적 방법에서는 사람의 직관에 따르기 때문에 성능에 한계
- 인식 대상이 달라지게 되면, 새로 처음부터 설계해야 했음
- 하지만 심층 학습은 전체 깊은 신경망을 동시에 최적화 (종단간 학습, End-to-End)
- 깊이 (Depth)의 중요성 (더 깊어질수록, 더 정교한 분할)
- 계층적 특징 (Hierarchical Features)
- 깊은 신경망에서는 층의 역할이 잘 구분됨
- 반면 얕은 신경망은 하나 또는 두 개의 은닉층이 여러 형태의 특징을 모두 답당
5. Convolutional Neural Network (CNN)
컨볼루션 신경망
- DMLP: 완전 연결 구조로 높은 복잡도, 학습이 느리고 과잉 적합이 발생할 수도 있음
- 컨볼루션 신경망 (CNN) -> 부분 연결 구조
- 격자 구조를 갖는 데이터에 적합
- 컨볼루션 연산을 수행하여 특징 추출
- 영상 분류나 문자 인식 등 인식 문제에 높은 성능
- 컨볼루션 (Convolution): 해당하는 요소끼리 곱해서 결과를 모두 더하는 선형 연산
- 보폭 (Stride): 커널을 다음 컨볼루션 연산을 위해 이동시키는 칸 수
- 패딩 (Padding): 컨볼루션 결과의 크리를 조정하기 위해 입력 배열의 둘레를 확장하고, 0으로 채우는 연산
- 풀링: 일정 크기의 블록을 통합하여 하나의 대푯값으로 대체하는 연산
- 최댓값 풀링 (Max Pooling): 지정된 블록 내의 원소들 중에서 최댓값을 대푯값으로 선택
- 평균값 풀링 (Average Pooling): 블록 내의 원소들의 평균값을 대푯값으로 사용
컨볼루션 신경망
- 특징 추출
- 컨볼루션 연산을 하는 Conv 층
- ReLU 연산을 하는 ReLU
- 풀링 연산을 하는 Pool
- 추출된 특징을 통해 분류나 회귀를 수행하는 다층 퍼셉트론
- 전체 연결된 (Fully connected) FC 층 반복
- 분류의 경우 마지막 층에 소프트맥스 연산 수행
6. 심층 학습 기초 2
컨볼루션 (합성곱) 신경망 - CNN
- 영상 인식의 예: 픽셀 단위의 정보로부터 특정 사물 등을 인식하는 것
- 컴퓨터 비전의 어려운 점
- 동일한 객체라도 영상을 찍는 카메라 이동에 따라 모든 픽셀 값이 변화 됨
- 경계색 (보호색)으로 배경과 구분이 어려운 경우
- 조명에 따른 변화로 구분이 힘듦
- 기형적 형태의 영상 존재, 일부가 가려진 영상 존재
- 같은 종류 간의 변화가 큼 (같은 고양이라도 고양이의 크기가 다름)
- 컨볼루션층 (CONV): 선형 함수인 컨볼루션과 비선형 함수인 활성 함수의 조합
- 풀링층 (POOL): 컨볼루션의 얻어진 특징을 통계적으로 압축
- 덧대기 (Padding): 가장 자리에서 영상의 크기가 줄어드는 효과 방지 (각 층의 입출력 특징 형상 유지)
- 가중치 공유 (묶은 가중치): 모든 노드가 동일한 커널을 사용하므로 매개변수는 3개에 불과 (모델 복잡도가 낮아짐)
- 다중 특징 맵 추출: 커널 값에 따라 커널이 추출하는 특징이 달라짐 (한 개의 커널만 사용하면 너무 빈약한 특징만 추출)
- 전체 구조: CONV - (ReLU) - POOL - … - FC
- 영상 분야에서 다양하게 활용 (분류, 검색, 검출, 분할 등)
DMLP와 CNN의 비교
- DMLP: 완전 연결 구조로 높은 복잡도, 학습이 느리고 과잉 적합 우려
- CNN: 컨볼루션 연산을 이용한 부분 연결 (희소 연결) 구조로 복잡도 낮춤, 좋은 특징을 추출해서 학습
- 격자 구조 (영상, 음성 등)를 갖는 데이터에 적합
- 수용장은 인간의 시각과 유사
- 가변 크기의 입력 처리 가능
- CNN의 완전 연결 신경망과 차별
- 학습에 의해 결정된 복수의 커널 (혹은 필터)에 대응되는 특징을 추출하는 CONV 층
- 각 층의 입출력의 특징 형상을 유지시킴 (특징 맵)
- 영상의 공간 정보를 유지하면서 공간적으로 인접한 정보의 특징을 효과적으로 인식
- 각 커널 (필터)은 파라미터를 공유하여 완전 연결 신경망 대비 학습 파라미터가 적음
- 추출된 영상의 특징을 요약하고 강화하는 POOL 층
- 가변 크기의 데이터 다루기
- 완전 연결 신경망은 특징 벡터의 크기가 달라지면, 연산 불가능
- CNN은 가변 크기를 다룰 수 있음 (컨볼루션 층, 풀링 층에서 커널 및 보폭 수정을 통한 특징 맵 크기 조절)
- 학습에 의해 결정된 복수의 커널 (혹은 필터)에 대응되는 특징을 추출하는 CONV 층
컨볼루션 (합성곱) 연산
- 컨볼루션은 해당하는 요소끼리 곱하고 결과를 모두 더하는 선형 연상
- 영상에서 특징을 추출하기 위한 용도로 사용 (공간 필터)
컨볼루션층
- 특징 학습
- 커널을 사람이 설계 하지 않고, 학습으로 찾음
- 2차원 영상이
7*7
커널을 64개 사용한다면, 학습은 (7*7+1) * 64 = 3200개의 매개변수를 찾아내야 함
- 2차원 영상이
- DMLP와 마찬가지로 오류 역전파로 커널을 학습
- 커널을 사람이 설계 하지 않고, 학습으로 찾음
- 컨볼루션 연산에 따른 CNN 특성
- 이동에 동변 (신호가 이동하면, 이동 정보가 그대로 특징 맵에 반영)
- 병렬 분산 구조
- 각 노드는 독립적으로 계산하므로 병렬 구조
- 노드는 깊은 층을 거치면서 전체에 영향을 미치므로 분산 구조
- 큰 보폭에 의한 다운 샘플링: 일반적으로 보폭이 k이면, k개 마다 하나씩 샘플링하여 커널을 적용
- 텐서 적용: 3차원 이상의 구조에도 적용 가능
- n차원 구조의 데이터 적용
풀링층
- 풀링 (Pooling) 연산
- 최대 풀링, 평균 풀링, 가중치 평균 풀링 등
- 보폭을 크게 하면, 다운 샘플링 효과
- 풀링 연산의 특성
- 풀링은 상세 내용에서 요약 혹은 평균 등의 통계적 대표성을 추출함
- 매개 변수가 없음
- 특징 맵의 수를 그대로 유지함 (크기 X)
- 연산 효율화 (연산 횟수, 연결 가중치 개수를 줄임)
- 작은 변화에 둔감 (물체 인식이나 영상 검색 등에 효과적)
전체 구조
- 빌딩 블록
- CNN은 빌딩 블록을 이어 붙여서 깊은 구조로 확장
- 전형적 빌딩 블록의 예시: 컨볼루션층 -> 활성함수 (주로 ReLU) -> 풀링층
- 다중 커널을 사용하여 다중 특징 맵을 추출
- 컨볼루션 층의 출력 크기와 매개변수 수
- 입력:
W1 * H1 * D1
- K개 F*F 커널, 보폭 S, 덧대기 P
- 출력의 크기:
W2 * H2 * D2
- W2 = (W1 - F + 2P) / S + 1
- H2 = (H1 - F + 2P) / S + 1
- D2 = K
- 매개변수의 수
- 커널마다
(F*F*D1)
개의 가중치와 1개의 바이어스를 가짐. 전체 매개변수 수는(F*F*D1) * K + K
- 커널마다
- 일반적으로 F = 2, S = 2 혹은 F = 3, S = 1을 사용함
- 입력:
- 초창기 CNN 사례는 LeNet-5
- 특징 추출
- CONV - POOL - CONV - POOL - CONV의 다섯 층을 통해 28*28 명암 영상을 120차원의 특징 벡터로 변환
- 평균 풀링 사용
- 분류: 은닉층이 하나인 MLP
- CNN 첫 성공 사례; 필기 숫자 인식기를 만들어서 수표 인식 자동화 시스템 구현
- 특징 추출
출처: 프로그래머스 인공지능 데브코스 4기 9주차 강의 -> 강의 내용 정리 깃허브 링크