Bạn có bao giờ tự hỏi cần bao nhiêu hidden layers cho 1 cái Neural Network? Bởi vì bạn không thể cứ thêm bao nhiêu tùy thích vì nếu vậy sẽ dẫn đến các vấn đề như vanishing gradient hoặc là overfitting, còn nếu thêm ít quá thì model sẽ chưa được tối ưu 1 cách tốt nhất. Chung quy lại là làm sao để xác định số hidden layers cần phải thêm vào cho phù hợp thì ở bài này mình sẽ giới thiệu 1 phương pháp lạ mà quen.
Kiến trúc của ResNet(2015)
Phương pháp mà mình sẽ giới thiệu ngay sau đây cũng là tâm điểm tạo nên sự nổi tiếng và tiếng vang lớn cho ResNet vào năm 2015.
Residual Net
Residual Net chính là phương pháp mà mình sẽ nói trong bài viết này. Trước khi giải thích cách hoạt động của Residual Net thì mình sẽ lấy 1 ví dụ cho các bạn dễ hình dung:
Giả sử các bạn đang lướt internet và thấy 1 đôi giày cực kì ưng và thích nó và đôi giày chỉ có giá 10 đồng và lại còn gần nhà mình nữa thì đây chắc chắn là ý trời muốn mình mua cho bằng được rùi. Thế là các bạn mang theo đúng 10 đồng tới để mua đôi giày này, nhưng khi tới nơi bạn phát hiện rằng đôi giày này đã tăng giá lên thành 12 đồng vì vậy bạn không đủ tiền để mua nhưng bạn thật sự thích đôi giày này cực, thì cách đơn giản nhất là bạn ' QUAY VỀ ' nhà và ' LẤY THÊM ' tiền.
Thì cách hoạt động của Residual Net cũng giống vậy nhưng ngược lại tí là quay về và bỏ bớt.
Như trong hình các bạn có thể thấy chúng ta muốn gắn thêm 2 cái hidden layers nữa thì lúc này sẽ có 2 trường hợp xảy ra ( giống như đầu bài mình đã đề cập) :
- model chưa được tối ưu nên việc gắn thêm 2 layers sẽ giúp tăng performance
- model đã tối ưu rồi và việc gắn thêm sẽ dẫn tới vanishing - overfitting
Để giải quyết 2 vấn đề này mô hình ResNet đã tạo nên 1 cái Identity ( hay còn gọi quen thuộc là short cut ) tức là chúng ta cứ thêm hidden layers 1 cách dư thừa đi để phòng trường hợp thiếu, nếu dư thì chúng ta sẽ quay về bỏ bớt ra.
Ở trong hình bạn sẽ thấy có 2 con đường trước khi đi qua ReLu là:
- Đi thẳng qua từng hidden layer
- đi theo đường cong - Identity ( bỏ qua 2 cái hidden layers ) và tới thẳng ReLu
Và việc xác định con đường nào hợp lí sẽ là công việc của máy tính ( thông qua backward ). Chỉ tạo nên 1 cái Identity ( đơn giản là if chưa optimize --> đi thẳng else ---> đi đường cong ) đã giải quyết được 2 vấn đề mà chúng ta nhức đầu mỗi khi xây dựng 1 model.
Tóm lại: Chúng ta không nhất thiết phải xác định cụ thể cần chính xác bao nhiêu hidden layers là đủ mà việc đó sẽ nhờ máy tính làm dùm. ' Cứ gắn thêm layers đi, nếu không tốt hơn thì đừng làm tồi hơn ' là cách Identity ( short cut) hoạt động.