손실 함수를 설명하고자 한다!
1. sum of squares
list끼리 operand는 안되지만 numpy array끼리 operand는 통한다. 따라서 numpy로 변환하여 주자.
2. cross entropy
식을 살펴보면 어차피 t값이 1인 경우에만 -logh(x)를 구하기 때문에 자연로그를 계산하는 식이 된다.
잘 예측할 수록 0에 가까워지기 때문에 loss가 작아진다는 것을 표현할 수 있다.
delta는 로그함수에 0을 대입할 수 없어서 넣어주었다.
위의 sum of squares error과 숫자 차이는 있지만 틀린 답을 예측했을때를 비교해보면 정답일때 loss가 적어진다는 것은 같습니다.
3. 미니배치 학습
배치학습시 1개의 데이터가 아닌 여러 개의 데이터에 대해서 loss를 구해줘야 한다.
방법은 sum of squares, cross entropy 모두 동일한데, 1개 데이터에 대해서 loss를 구해주고 평균을 구하면 된다. 즉, 합을 구하고 크기로 나눠준다. => 평균 loss func
데이터를 오버플로 문제를 해결하기 위해서 normalize하고, cross entropy를 사용하기 위해서 one hot encoding을 label에 적용하였다.
*train size의 범위(0 - 6만)에서 batch_size의 인덱스(10개의 인덱스)를 무작위로 꺼낸다.
one-hot-encoding 코드도 잘 보면 좋을 듯 하다.
-배치용 코드는 잘 이해가 안간다. p118 참고
4. 활성화 함수 팁
계단 함수를 사용하면 미분을 해도 대부분이 0이다. 하지만 시그모이드는 미분하면 값이 존재하기때문에 loss가 변하므로 신경망 학습에 도움이 된다.
5. 미분
해석적 미분: 수학 시간에 배운 미분
수치 미분: 근사치로 계산
오차가 생길 수 밖에 없는데 중심 차분으로 개선하였다
6. sgd 정리
무작위로 선정하기 때문에 확률적 경사 하강법이라고 부른다.
핵심: 기울기가 가르키는 쪽은 각 장소에서 함수의 출력 값을 크게 줄이는 방향이다.
7. 2층 신경망 클래스 구현
*sys.path.append(os.pardir) 의미
init: input, hidden, output, 가중치 매개변수를 초기화한다.
predict, loss, accuracy, numerical gradient
경사하강법이 일단 예측하고 예측한 값과 참 값의 차이를 구해서 loss를 구하고 그 loss에 대해 매개변수가 미분때려서 파라메타 업데이트하면서 점점 좋아지는 거 아닌가?
근데 여기서는 미니배치 뽑고 미니 배치에 대해서 loss에 대한 파라매터의 기울기를 구하면 그 기울기가 loss를 작게하는 방향을 제시하므로 가중치 매개변수를 기울기 방향으로 갱신한다라고 하네.
내가 원래 알고 있던 정보가 맞는게 코드의 network.numerical_gradient(x_batch, t_batch) 부분에 잘 나와있음!!
'이제는 사용하지 않는 공부방 > Artificial intelligence' 카테고리의 다른 글
[밑바닥부터 시작하는 딥러닝] 5강 오차역전파법 핵심정리 (0) | 2021.04.30 |
---|---|
[추천시스템] 컨텐츠 기반 모델 word2vec ( cbow, skip-gram ) (0) | 2021.04.26 |
[밑바닥부터 시작하는 딥러닝] 3장 신경망 핵심정리 (0) | 2021.04.24 |
[추천시스템] 컨텐츠 기반 추천시스템 TF-IDF (0) | 2021.04.19 |
[fast ai] chapter9_tabular modeling (0) | 2021.04.18 |