본문 바로가기

딥러닝/밑바닥부터 시작하는 딥러닝

(8)
8장 : 딥러닝 8.1 더 깊게 8.1.1 더 깊은 신경망으로 3x3의 작은 필터 사용한 합성곱 계층 활성화 함수는 ReLU 완전연결 계층 뒤에 드롭아웃 계층 사용 Adam을 사용해 최적화 가중치 초깃값은 He 초깃값 -> 정확도 99.38%까지 올라감 8.1.2 정확도를 더 높이려면 데이터 확장 (data augmentation) : 입력 이미지를 알고리즘을 동원해 '인위적'으로 확장 입력 이미지를 회전하거나 세로로 이동 crop: 이미지 일부를 잘라냄 filp: 좌우를 뒤집음 밝기 등의 외형 변화 확대, 축소 등의 스케일 변화 8.1.3 깊게 하는 이유 신경망의 매개변수 수가 줄어든다. 층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같은 수준의 표현력 달성 가능 -> 넓은 수용 영역 소화 가능 층을 거듭..
7장 : 합성곱 신경망(CNN) 7.1 전체 구조 2.1.1 소제목 완전연결(fully-connected, 전결합, 지금까지 본 신경망) Affine 계층 CNN (합성곱 계층 Conv와 풀링 계층 Pooling이 새로 추가) -> 지금까지의 Affine-ReLU 연길이 Conv-ReLU로 바뀜 -> 출력에 가까운 층에서는 Affine-ReLU 구성 사용 -> 출력 계층에서는 Affine-Softmax 조합 그대로 사용 7.2 합성곱 계층 7.2.1 완전연결 계층의 문제점 데이터의 형상이 무시됨 3차원 데이터인 이미지 데이터를 평평한 1차원 데이터로 평탄화 공간적 정보 무시 -> 합성곱 계층은 형상 유지 CNN에서는 입출력 데이터를 특징 맵(feature map)이라고 함 7.2.2 합성곱 연산 : 필터 연산 입력 데이터와 필터 모두 ..
6장 : 학습 관련 기술들 6.1 매개변수 갱신 최적화 : 손실 함수의 값을 가능한 한 낮추는 최적의 매개변수를 찾는 것 6.1.2 확률적 경사 하강법(SGD) #SGD class SGD: def __init__(self, lr=0.01): self.lr = lr def update(self, params, grads): for key in params.keys(): params[key] -= self.lr*grads[key] params 매개변수들에 대해 learning rate * key에 대한 gradient만큼 빼주는 방법 6.1.3 SGD의 단점 비효율적 현재 장소에서 기울어진 방향을 따라서 이동하는데, 현재 위치에서 기울어진 방향이 global minimum의 방향과 차이가 날 수 있어서 지그재그를 그리면서 비효율적인 ..
5장 : 오차역전파법 수치 미분을 사용해 가중치 매개변수에 대한 손실 함수의 기울기를 구하는 방법은 계산 시간이 오래 걸린다는 단점 -> 오차역전파법 : 효율적으로 계산 가능 5.1 계산 그래프 5.1.1 계산 그래프로 풀다 문제 : 슈퍼에서 사과 2개, 귤을 3개 구매. 사과는 1개에 100원, 귤은 1개 150원. 소비세가 10%일 때 지불 금액 구하기 문제 풀이: 계산 그래프를 구성한다. 그래프에서 계산을 왼쪽에서 오른쪽으로 진행한다. : 순전파 5.1.2 국소적 계산 계산 그래프의 특징: 국소적 계산을 전파함으로써 최종 결과를 얻음 전체에서 어떤 일이 벌어지든 상관없이 자신과 관계된 정보만으로 결과 출력 가능 5.1.3 왜 계산 그래프로 푸는가? 국소적 계산 가능 중간 계산 결과 모두 보관 가능 역전파를 통해 미분을 ..
4장 : 신경망 학습 학습 : 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것 손실함수 : 신경망이 학습할 수 있도록 해주는 지표 학습의 목표 : 손실함수의 결괏값을 가장 작게 만드는 가중치 매개변수를 찾는 것 4.1 데이터에서 학습한다! 4.1.1 데이터 주도 학습 데이터 -> 특징(feature) 추출 -> 패턴 학습 (기계학습: SVM, KNN) 특징 : 입력 데이터에서 본질적인 데이터를 정확하게 추출할 수 있도록 설계된 변환기 (보통 벡터로 기술) 한계 : 특징은 여전히 사람이 설계해야 함 -> 신경망은 특징까지 기계가 스스로 학습 (종단간 기계학습 : 처음부터 끝까지 기계가 학습) 4.1.2 훈련 데이터와 시험 데이터 기계학습 문제는 데이터를 훈련 데이터와 시험 데이터로 나눠 학습과 실험을 수행하는..
3장 : 신경망 퍼셉트론의 가중치 - 사람이 수동적으로 설정해야 함 신경망 : 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력 신경망이 입력 데이터가 무엇인지 식별하는 처리 과정 : 활성화 함수 3.1 퍼셉트론에서 신경망으로 3.1.3 활성화 함수 : 입력 신호의 총합을 출력 신호로 변환하는 함수 입력 신호의 총합이 활성화를 일으키는 지 정하는 역할 단순 퍼셉트론 : 단층 네트워크에서 계단 함수를 활성화 함수로 사용한 모델 다층 퍼셉트론 : 신경망 (여러 층으로 구성, 시그모이드 함수 등의 매끈한 활성화 함수 사용하는 네트워크) 3.2 활성화 함수 3.2.1 시그모이드 함수 참고: https://gooopy.tistory.com/52 3.2.2 계단 함수 구현 import numpy as np impo..
2장 : 퍼셉트론 2.1 퍼셉트론이란? 다수의 신호를 입력으로 받아 하나의 신호를 출력 신호 : 흐름을 만들고 정보를 앞으로 전달 0 : 신호가 흐르지 않는다 /1: 신호가 흐른다 노드(뉴런), 가중치, 임계값으로 구성 임계값 : 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력 2.2 단순한 논리 회로 X1 X2 : 입력 신호 y : 출력 신호 2.2.1 AND 게이트 두 입력이 모두 1일 때만 1 출력, 그 외에는 0 출력 2.2.2 NAND 게이트와 OR 게이트 NAND : 두 입력이 모두 1일 때만 0 출력, 그 외에는 1 출력 OR : 입력 신호 중 하나 이상이 1이면 출력 1 2.3 퍼셉트론 구현하기 2.3.2 가중치와 편향 도입 b (편향) : 뉴런이 얼마나 쉽게 활성화되느냐를 제어 (-임계..
1장 : 헬로 파이썬 1.5.4 1차원 배열 : 벡터 2차원 배열 : 행렬 벡터와 행렬 일반화 : 텐서 1.5.5 브로드캐스트 : 형상이 다른 배열끼리의 계산 import numpy as np A = np.array([[1,2], [3,4]]) A * 10 -> 10 20 30 40 B = np.array([10,20]) A * B -> 10 40 30 80 1.5.6 원소 접근 X = np.array([[51,55], [14, 19], [0,4]]) for row in X: print(row) -> [51 55] [14 19] [0 4] X = X.flatten() #X를 1차원 배열로 변환(평탄화) print(X) -> [51 55 14 19 0 4] X[np.array([0,2,4])] #인덱스가 0,2,4인 원소 얻기..