본문 바로가기

Data Science/Deep Learning

(8)
[밑바닥부터 시작하는 딥러닝 1] Ch 8. 딥러닝 지금까지 신경망에 대해 자세히 공부하였다. 이번 포스팅은 "밑바닥부터 시작하는 딥러닝 1"의 마지막 장으로 "딥러닝"에 대한 설명을 해보도록 하겠다. 간단하게 설명하면 딥러닝이란 층을 깊게 한 심층 신경망이다. 대규모 일반 사물 인식의 경우, 문제가 엄청나게 복잡하므로 층을 깊게 하면 정확도를 크게 끌어올릴 수가 있다. 이러한 이유 때문에 "딥러닝"이 각광받고 있는 것이다. 또한 딥러닝 모델의 정확도를 향상시키는 방법으로 "앙상블 학습, 학습률 감소, 데이터 확장" 등이 있다. 여기서 "데이터 확장"이란 입력 이미지(학습 이미지)를 알고리즘을 동원하여 인위적으로 확장하는 것을 의미한다. 데이터 확장 방법으로는 대표적으로 6가지가 존재한다. Flip 이미지를 랜덤하게 좌/우 또는 상/하 반전시키는 방법 이..
[밑바닥부터 시작하는 딥러닝 1] Ch 7. 합성곱 신경망(CNN) 이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 합성곱 신경망(CNN)을 기초로 한다. 그렇다면 합성곱 신경망. 즉, CNN이란 무엇일까? 이번 포스팅에서는 CNN에 대해 정리해보도록 하겠다. CNN의 네트워크 구조를 살펴보면, 지금까지 앞에서 공부한 완전연결 계층인 Affine 계층에 추가적으로 합성곱 계층(Convolutional Layer)과 풀링 계층(Pooling Layer)이 새롭게 등장한다. 여기서 주목할 점은 출력에 가까운 층에서는 지금까지 공부한 Affine-ReLU 구성을 사용할 수 있다는 것, 그리고 마지막 출력 계층에서는 Affine-Softmax 조합을 그대로 사용한다는 것이다. CNN에서는 패딩(Padding), 스트라이드(Stride) 등 CNN 고유의 용어가 등장하며, ..
[밑바닥부터 시작하는 딥러닝 1] Ch 6. 학습 관련 기술들 이번 포스팅에서는 가중치 매개변수의 최적값을 탐색하는 최적화 방법, 가중치 매개변수 초깃값, 하이퍼파라미터 설정 방법 등 신경망 학습에서 중요한 기술들에 대해서 설명하고, 과적합의 대응책인 가중치 감소, Dropout, 배치 정규화 등의 정규화 방법에 대해서도 설명하도록 하겠다. 확률적 경사하강법(SGD) 기울어진 방향으로 일정 거리만큼 가겠다는 단순한 방법임 단점은 기울기가 달라지는 함수에서는 탐색 경로가 비효율적임 따라서 SGD는 단순하고 구현도 쉽지만, 문제에 따라서는 비효율적일 때가 있음 이러한 SGD의 단점을 개선해주는 방법으로는 "Momentum, AdaGrad, Adam"이 있음 Momentum 기본적으로 SGD와 유사하지만, "속도(v)"라는 개념이 추가됨 즉, 물체가 아무런 힘을 받지 않..
[밑바닥부터 시작하는 딥러닝 1] Ch 5. 오차역전파법 여태까지 우리는 단순하고 구현하기도 쉬운 "수치 미분"을 통해 가중치 매개변수에 대한 손실 함수의 기울기를 구했다. 그러나 "수치 미분"은 계산 시간이 오래 걸린다는 단점이 있으므로, 일반적으로는 "오차역전파법"을 사용한다. 그렇다면 수치 미분은 아무런 쓸모가 없는 것일까? 그렇지 않다. 수치 미분은 오차역전파법을 정확히 구현했는지 확인하기 위해 필요하다. (기울기 확인 = Gradient Check) (즉, 수치 미분의 결과와 오차역전파법의 결과를 비교하여 오차역전파법을 제대로 구현했는지 검증하는 용도로 사용) 이와 같은 작업이 필요한 이유는 "수치 미분"은 구현이 단순하고 쉬운 반면, "오차역전파법"은 구현하기 복잡해서 종종 실수를 할 수 있기 때문이다. 일반적으로 두 방법에 대한 결과의 오차가 0에..
[밑바닥부터 시작하는 딥러닝 1] Ch 4. 신경망 학습 이번 포스팅은 "신경망 학습"에 대한 내용을 다루도록 하겠다. 학습 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 의미함 신경망이 학습할 수 있도록 해주는 지표가 바로 "손실 함수"임 손실 함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표이며, 이 때 "경사하강법"이 사용됨 기계학습에서는 사람의 개입을 최소화하고, 수집한 데이터로부터 패턴을 찾으려 시도한다. 신경망과 딥러닝은 기존 기계학습에서 사용하던 방법보다 사람의 개입을 더욱 배제할 수 있게 해주는 중요한 특성을 지녔다. 이와 같은 이유로 딥러닝을 "End-to-End 기계학습"이라고도 한다. 기계학습 문제는 데이터를 학습 데이터(train data)와 테스트 데이터(test data)로 나눠서 학습과 ..
[밑바닥부터 시작하는 딥러닝 1] Ch 3. 신경망 이번 포스팅에서는 "신경망"에 대해서 다뤄보도록 하겠다. 앞 장에서 공부한 퍼셉트론은 매개변수(가중치와 편향) 조정을 사람이 수동으로 해주어야 한다는 단점이 있다. 이러한 단점을 해결해 줄 수 있는 것이 바로 신경망이다. 신경망은 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력이 있다!! 신경망을 그림으로 나타내면 다음과 같으며 크게 입력층, 은닉층, 출력층 이렇게 3개로 구분된다. 여기서 "활성화 함수"라는 개념이 등장한다. 활성화 함수란 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 수행한다. (** 앞서 2장에서 본 퍼셉트론은 활성화 함수로 "계단 함수"를 사용한다) 신경망에서 자주 이용되는 활성화 함수 (모두 비선형) 시그모이드 함수 ReLU 함수 일반적으로 이용되는 출..
[밑바닥부터 시작하는 딥러닝 1] Ch 2. 퍼셉트론 이번 포스팅에서는 신경망의 기원이 되는 알고리즘인 "퍼셉트론"에 대한 내용을 다루도록 하겠다. 퍼셉트론 다수의 신호를 입력으로 받아서 하나의 신호를 출력함 뉴런에서 보낸 신호의 총합이 정해진 한계(임계값)를 넘어설 때만 1을 출력함(이 때 뉴런이 활성화된다고 함) AND 게이트 입력이 둘이고 출력은 하나인 논리 회로임 두 개의 입력이 모두 1일 때만 1을 출력함 NAND 게이트 Not AND를 의미함 즉, AND 게이트의 출력을 뒤집은 것임 마찬가지로 입력이 둘이고 출력은 하나인 논리 회로임 두 개의 입력이 모두 1인 경우에만 0을 출력하고, 나머지 경우는 모두 0을 출력함 OR 게이트 마찬가지로 입력이 둘이고 출력은 하나인 논리 회로임 입력 신호 중, 하나 이상이 1이면 출력이 1이 됨 여기서 중요한 ..
[밑바닥부터 시작하는 딥러닝 1] Ch 1. 헬로 파이썬 1장은 파이썬의 기초적인 내용들에 대한 설명이 주를 이룬다. 필자는 파이썬 기초에 대한 지식이 있는 상태에서 교재를 접했기 때문에, 1장은 그냥 가벼운 마음으로(?) 읽어넘겼다. 다만, 1장에서도 중요한 내용들이 있기에, 특별히 주의깊게 살펴봐야 할 부분들에 대해서 정리해보도록 하겠다. 클래스 개발자가 직접 클래스를 정의하면 독자적인 자료형을 만들 수 있음 또한 해당 클래스만의 전용 함수(메서드)와 속성을 정의할 수 도 있음 클래스 생성은 딥러닝 모델 생성 시에 필수적이므로, 개념을 잘 익혀두어야 함 클래스 정의에는 __init__이라는 특별한 메서드가 있으며, 클래스를 초기화하는 방법을 정의한다. 이 초기화용 메서드를 생성자라고 하며, 클래스의 인스턴스가 만들어질 때 한 번만 불린다. 또한 파이썬에서는..