
Truyền ngược (hay còn gọi là lan truyền ngược, Tiếng Anh: back-propagation), là một từ viết tắt cho "backward propagation of errors" tức là "truyền ngược của sai số", là một phương pháp phổ biến để huấn luyện các mạng thần kinh nhân tạo được sử dụng kết hợp với một phương pháp tối ưu hóa như gradient descent. Phương pháp này tính toán gradient của hàm tổn thất với tất cả các trọng số có liên quan trong mạng nơ ron đó. Gradient này được đưa vào phương pháp tối ưu hóa, sử dụng nó để cập nhật các trọng số, để cực tiểu hóa hàm tổn thất.
Truyền ngược yêu cầu một đầu ra mong muốn, đã biết cho mỗi giá trị đầu vào để tính toán gradient hàm tổn thất. Do đó, nó thường được xem là một phương pháp học có giám sát, mặc dù nó cũng được sử dụng trong một số mạng không có giám sát như autoencoders. Nó là một tổng quát hóa của quy tắc delta cho các mạng nuôi tiến đa tầng, có thể thực hiện bằng cách sử dụng quy tắc dây chuyền để tính toán lặp đi lặp lại các gradient cho mỗi lớp. Truyền ngược yêu cầu các hàm kích hoạt được sử dụng bởi cácnơ-ron nhân tạo (hay "nút") khả vi.
순전파 (예측) net propagation
역전파 (학습) back propagation




- 예측: 층을 깊게 쌓으면 모델 성능 좋아질것이다!
- 결과: 층을 깊게 쌓았더니 성능이 더 떨어진겻을 확인
- 이유: sigmoid함수를 활성한수로 사용하면사 층을 깊게 쌓았을때 기울기 소실문제가 발생!
- 해결: 중간층의 활성함수를 relu로 변경
# 1. 신경망 델 설계
# 뼈대
model = Sequential()
# 입력층 (28*28 차원데이터)
model.add(InputLayer(input_shape = (28,28)))
# 중간층(인닉층),첫번쨰 16, 두번째 8
model.add(Flatten()) # 입력받은 2차원의 사진데이터를 1차원으로 병경
# relu사용 👻
model.add(Dense(units = 64, activation ='sigmoid'))
model.add(Dense(units = 128, activation = 'sigmoid'))
model.add(Dense(units = 256, activation ='sigmoid'))
model.add(Dense(units = 256, activation = 'sigmoid'))
model.add(Dense(units = 168, activation ='sigmoid'))
model.add(Dense(units = 64, activation = 'sigmoid'))
# 출력층 (다중분류 > 틀래스 10개)
model.add(Dense(units =10, activation = 'softmax'))
# 학습방법 및 평가방법
model.compile(loss ='sparse_categorical_crossentropy',
optimizer = 'SGD',
metrics = ['accuracy'])
h1 = model.fit(x_train,y_train, validation_split=0.2, epochs = 20)
#평가
model.evaluate(x_test, y_test)

-> 왜 결과 떨어젔니?