Deep Learning - Back Propagation 오차 역전파 🐱‍💻 - Relu 사용방법

화이티 ·2024년 1월 5일

Deep Learning

목록 보기
9/24

오차 역전파 (Back Propagation)

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함수의 문제점

  • 기울기 소실 문제 (Vanishing Gradient)

    RELU 함수 사용한다 - 제일 많이 사용하겠다

활설화함수 (Relu)사용해보기 🤠

  • 예측: 층을 깊게 쌓으면 모델 성능 좋아질것이다!
  • 결과: 층을 깊게 쌓았더니 성능이 더 떨어진겻을 확인
  • 이유: 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)


-> 왜 결과 떨어젔니?

profile
열심히 공부합시다! The best is yet to come! 💜

0개의 댓글