softmax_layer
softmax란?
참조 : https://ratsgo.github.io/deep%20learning/2017/10/02/softmax/
입력의 모든 합을 1로 만드는 함수 입니다.
softmax는 역전파의 시작점 입니다.
우리는 error를 통해서 softmax input의 gradient를 구해야합니다. (그래야 뒤로 쭉쭉 갈수 있겠죠?)
먼저 연산을 위해 미리 softmax를 미분한다면
일때
일때
역전파
softmax_layer.c
forward_softmax_layer
함수 이름: forward_softmax_layer
입력:
softmax_layer l: softmax 레이어의 정보를 담은 구조체
network net: 뉴럴 네트워크의 정보를 담은 구조체
동작:
softmax 레이어의 forward propagation을 수행한다.
softmax_tree가 존재하면, softmax_tree를 이용하여 그룹화된 입력값들에 대해 softmax 연산을 수행한다.
softmax_tree가 존재하지 않으면, 입력값에 대해 softmax 연산을 수행한다.
만약 net.truth가 존재하고, l.noloss가 false이면, softmax_cross_entropy_loss 를 이용하여 손실을 계산한다.
설명:
softmax 레이어는 출력값을 확률값으로 변환해준다.
softmax_tree는 계층 구조를 이용하여 그룹화된 노드를 softmax 연산하기 위해 사용된다.
softmax_cpu 함수는 입력값에 대해 softmax 연산을 수행하고, 결과를 출력값으로 저장한다.
softmax_x_ent_cpu 함수는 softmax_cross_entropy_loss 를 계산하고, 손실값을 loss 배열에 저장한다.
손실값은 l.cost[0]에 저장된다.
backward_softmax_layer
함수 이름: backward_softmax_layer
입력:
softmax_layer l: softmax 레이어의 구조를 저장하는 구조체
network net: 신경망 전체의 구조와 데이터를 저장하는 구조체
동작:
입력값에 대한 softmax 함수의 역전파 수행
axpy_cpu 함수를 사용하여, 현재 레이어의 델타 값을 이전 레이어의 델타 값에 더해줌으로써, 역전파를 계속 진행할 수 있도록 함
설명:
softmax 레이어의 역전파는, softmax 함수의 출력값과 레이어의 델타 값을 이용해 수행됨
이 함수에서는, 현재 레이어의 델타 값을 이전 레이어의 델타 값에 더해주는 과정을 수행함
이렇게 함으로써, 이전 레이어의 델타 값은 현재 레이어의 델타 값에 영향을 받도록 되어, 역전파를 계속 진행할 수 있음
이 함수는 델타 값을 직접 수정하므로, 반환값이 없음
make_softmax_layer
함수 이름: make_softmax_layer
입력:
int batch: 배치 크기
int inputs: 입력 뉴런 수
int groups: 그룹 수
동작:
입력 받은 batch, inputs, groups 값으로 softmax 레이어를 생성한다.
출력 뉴런 수는 입력 뉴런 수와 같다.
loss, output, delta, cost 배열을 초기화한다.
forward, backward 함수를 할당한다.
설명:
Softmax 레이어는 출력값을 확률로 변환하는 레이어로, 입력값의 지수 함수를 취한 후, 해당 값을 소프트맥스 함수의 분모로 사용해 출력값을 구한다.
이 함수에서는 입력으로 받은 batch, inputs, groups 값으로 Softmax 레이어를 생성한다.
assert 문을 사용하여, 입력 뉴런 수(inputs)가 그룹 수(groups)로 나누어 떨어지지 않을 경우 에러 메시지를 출력한다.
l.loss, l.output, l.delta, l.cost 배열을 초기화한다.
forward, backward 함수를 할당한다.
생성된 Softmax 레이어(l)를 반환한다.
Last updated
Was this helpful?