분류 전체보기 39

[밑바닥부터 시작하는 딥러닝 1] 6. 학습 관련 기술들 - 가중치의 초깃값

신경망 학습에서 특히 중요한 것이 가중치의 초깃값이다. [가중치 감소]는 오버피팅(과대적합)을 억제해 범용 성능을 높이는 테크닉이다. 가중치 매개변수 값이 작아지도록 학습하는 방법이다. # 가중치의 초깃값을 0으로 하면? 이는 나쁜 생각이다. 오차역전파법에서 모든 가중치의 값이 똑같이 갱신되기 때문이다. 예를 들어 2층 신경망에서 첫 번째와 두 번째의 층의 가중치가 0이라면 순전파 때는 입력층의 가중치가 0이기 때문에 두 번째 층의 뉴런에 모두 같은 값이 전달된다.두 번째 층의 모든 뉴런에 같은 값이 입력된다는 것은 역전파 때 두 번째 층의 가중치가 모두 똑같이 갱신된다는 뜻이다. 그래서 가중치들은 같은 초깃값에서 시작하고 갱신을 거쳐도 여전히 같은 값을 유지하는 것이다. 이는 가중치를 여러 개 갖는 의..

Git 메모: add 취소(unstage) 'restore --staged'

git에서 commit하려면 우선 staging area에 파일을 add해야 한다. $ git status On branch main Your branch is up to date with 'origin/main'. ​ Untracked files: (use "git add ..." to include in what will be committed) 04_kn_train_test.py 05_kn_preprocessing.py ​ nothing added to commit but untracked files present (use "git add" to track) git status 하여 현재 파일 상태를 본다. $ git add . git add . 하여 모두 staging 해보았다. ​ $ git s..

[밑바닥부터 시작하는 딥러닝 1] 6. 학습 관련 기술들 - 매개변수 갱신

손실함수의 값을 가능한 한 낮추는 매개변수를 찾는 일, 즉 매개변수의 최적값을 찾는 일을 최적화(optimization)라고 한다. 앞에서 다룬 확률적 경사 하강법(SGD)가 이러한 방법 중에 하나이다. # 확률적 경사 하강법(SGD) 확률적 경사하강법의 수식은 위와 같다. W는 갱신할 매개변수, ∂L/∂W 는 W에 대한 손실함수의 기울기, η는 학습률을 의미하는데, 실제로는 0.01이나 0.001과 같은 값을 미리 정해서 사용한다. 또 화살표는 우변의 값으로 좌변의 값을 갱신한다는 뜻이다. class SGD: def __init__(self, lr=0.01): self.lr = lr def update(self, params, grads): for key in params.keys(): params[k..

[밑바닥부터 시작하는 딥러닝 1] 5. 오차역전파법 구현하기

지금까지 구현한 계층을 조합해서 신경망을 구축해본다. https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/layers.py https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/util.py 구현을 위해 위 layer.py, util.py 파일을 다운받아 common 폴더에 집어 넣는다. import sys, os sys.path.append(os.pardir) from common.layers import * from common.gradient import numerical_gradient from collections imp..

[파이썬] np.random.randient, randn, rand 차이

np.random.randient(low, high, size=None, dtype=int) low에서 high-1까지의 난수를 반환한다. size 키워드로 shape를 지정할 수 있다. 지정하지 않은 경우 int형 난수를 반환한다. np.randon.randn(d0, d1, ..., dn) 표준 정규 분포(평균이 0, 표준편차가 1)를 따르는 난수를 반환한다. 인수는 (d0, d1, ..., dn)을 넣으면 d0 * d1 * ... * dn의 난수 배열을 반환한다. 인수를 넣지 않으면 float형 난수가 반환된다. np.random.rand(d0, d1, ..., dn) 0 이상 1 미만의 난수를 반환한다. 인수는 (d0, d1, ..., dn)을 넣으면 d0 * d1 * ... * dn의 난수 배열을..

[밑바닥부터 시작하는 딥러닝 1] 5. 오차역전파 - 활성화 함수 계층 구현

모든 계층은 forward()와 backward()라는 공통의 메서드를 갖도록 구현한다. (여기서 말하는 계층이란 신경망의 기능 단위이다.) 우선 곱셈 계층부터 MulLayer라는 이름의 클래스로 구현해보자. class MulLayer: def __init__(self): self.x = None self.y = None def forward(self, x, y): self.x = x self.y = y out = x * y return out def backward(self, dout): dx = dout * self.y # x와 y를 바꾼다. dy = dout * self.x return dx, dy __init__()에서는 인스턴스 변수인 x와 y를 초기화한다. 이 두 변수는 순전파 시의 입력값을 ..

[밑바닥부터 시작하는 딥러닝 1] 5. 오차역전파 - 역전파 기초

가중치 매개변수의 기울기(정확히는 가중치 매개변수에 대한 손실함수의 기울기)는 수치 미분을 사용해 구했었다. 수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다는 단점이 있다. 이번 장에서는 가중치 매개변수의 기울기를 효율적으로 계산하는 오차역전파법(backpropagation)을 계산 그래프를 사용해서 배워보자. # 계산 그래프(computational graph) 계산 과정을 그래프로 나타낸 것을 말한다. 노드(node)와 에지(edge, 노드 사이의 직선)로 표현한다. 간단한 문제를 풀어보자. 1개에 100원인 사과를 2개 샀다면, 이때 지불 금액은? 단, 소비세가 10% 부과된다. 사과의 100원이 ×2 노드로 흐르고, 200원이 되어 ×1.1 노드를 거쳐서 220원이 된다. 곱셈인 ..

[밑바닥부터 시작하는 딥러닝 1] 4. 신경망 학습 알고리즘 구현

경사하강법을 이용한 신경망 학습의 순서는 다음과 같다. 전제: 신경망에는 적응 가능한 가중치와 절편(편향)이 있고, 가중치와 절편을 훈련 데이터에 적응하도록 조정하는 과정을 학습이라고 한다. 신경망 학습은 다음과 같이 4단계로 수행한다. 1. 미니배치: 훈련 데이터 중 무작위로 가져온 일부를 미니배치라고 한다. 이 미니배치의 손실함수 값을 줄이는 것이 목표이다. 2. 기울기 산출: 미니배치의 손실함수 값을 줄이기 위해 각 가중치 매개변수의 기울기를 구한다. 기울기는 손실함수의 값을 가장 작게 하는 방향을 제시한다. 3. 매개변수 갱신 가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다. 4. 반복 데이터를 무작위로 선정하기 때문에 확률적 경사 하강법(stochastic gradient descent, ..

[파이썬] np.sum, 넘파이 배열에 조건문을 달면? (feat.밑바닥부터 시작하는 딥러닝)

>>> np.sum([0.5, 1.5]) 2.0 >>> np.sum([[0, 1], [0, 5]]) 6 >>> np.sum([[0, 1], [0, 5]], axis=0) array([0, 6]) >>> np.sum([[0, 1], [0, 5]], axis=1) array([1, 5]) 원래 사람들이 많이 쓰는 구조이다. sum()의 axis 인수는 몇 번째 차원인지를 지정하는 값이다. 0번째 차원은 세로, 1번째 차원은 가로이다. 그런데 이런 건 어떨까? import numpy as np X = np.array([51, 55, 14, 19, 0, 4]) print(X > 15)# bool 배열 # [ True True False True False False] print(X[X>15])# True에 해당..