RNNs: Khi nào nên áp dụng BPTT và / hoặc cập nhật trọng lượng?


15

Tôi đang cố gắng tìm hiểu ứng dụng RNNs cấp cao để ghi nhãn theo trình tự thông qua (trong số những người khác) bài viết năm 2005 của Graves về phân loại âm vị.

Để tóm tắt vấn đề: Chúng tôi có một bộ huấn luyện lớn bao gồm các tệp âm thanh (đầu vào) của các câu đơn và thời gian bắt đầu được gắn nhãn chuyên gia, thời gian dừng và nhãn cho các âm vị riêng lẻ (bao gồm một số âm vị "đặc biệt" như im lặng, sao cho mỗi mẫu trong mỗi tệp âm thanh được gắn nhãn bằng một số ký hiệu âm vị.)

Lực đẩy của bài báo là áp dụng RNN với các ô nhớ LSTM trong lớp ẩn cho vấn đề này. (Anh ấy áp dụng một số biến thể và một số kỹ thuật khác để so sánh. Tôi hiện tại CHỈ quan tâm đến LSTM đơn hướng, để giữ cho mọi thứ đơn giản.)

Tôi tin rằng tôi hiểu kiến ​​trúc của mạng: Một lớp đầu vào tương ứng với các cửa sổ 10 ms của các tệp âm thanh, được xử lý trước theo cách tiêu chuẩn để âm thanh hoạt động; một lớp ẩn của các tế bào LSTM và một lớp đầu ra với mã hóa một lần nóng của tất cả 61 biểu tượng điện thoại có thể.

Tôi tin rằng tôi hiểu các phương trình (phức tạp nhưng đơn giản) của chuyển tiếp và chuyển tiếp qua các đơn vị LSTM. Họ chỉ là tính toán và quy tắc chuỗi.

Điều tôi không hiểu, sau khi đọc bài báo này và một vài lần tương tự, là khi chính xác áp dụng thuật toán backpropagation và khi nào chính xác để cập nhật các trọng số khác nhau trong các nơ-ron.

Hai phương thức hợp lý tồn tại:

1) Backprop-khôn ngoan và cập nhật khung

Load a sentence.  
Divide into frames/timesteps.  
For each frame:
- Apply forward step
- Determine error function
- Apply backpropagation to this frame's error
- Update weights accordingly
At end of sentence, reset memory
load another sentence and continue.

hoặc là,

2) Backprop-khôn ngoan và cập nhật:

Load a sentence.  
Divide into frames/timesteps.  
For each frame:
- Apply forward step
- Determine error function
At end of sentence:
- Apply backprop to average of sentence error function
- Update weights accordingly
- Reset memory
Load another sentence and continue.

Lưu ý rằng đây là câu hỏi chung về đào tạo RNN bằng cách sử dụng giấy Graves làm ví dụ nhọn (và có liên quan đến cá nhân): Khi đào tạo RNN theo trình tự, liệu backprop có được áp dụng ở mọi dấu thời gian không? Là trọng lượng điều chỉnh mỗi dấu thời gian? Hoặc, trong một sự tương tự lỏng lẻo với đào tạo hàng loạt về các kiến ​​trúc chuyển tiếp thức ăn nghiêm ngặt, các lỗi được tích lũy và tính trung bình trên một chuỗi cụ thể trước khi áp dụng cập nhật backprop và weight?

Hay tôi còn bối rối hơn tôi nghĩ?

Câu trả lời:


25

Tôi sẽ giả sử rằng chúng ta đang nói về mạng lưới thần kinh tái phát (RNNs) tạo ra đầu ra ở mọi thời điểm (nếu đầu ra chỉ khả dụng ở cuối chuỗi, thì chỉ có nghĩa là chạy backprop ở cuối). Các RNN trong cài đặt này thường được đào tạo bằng cách sử dụng phương pháp truyền ngược rút ngắn theo thời gian (BPTT), hoạt động tuần tự trên các "khối" của chuỗi. Thủ tục trông như thế này:

  1. Chuyển tiếp vượt qua: Bước qua các bước thời gian tiếp theo , tính toán trạng thái đầu vào, ẩn và đầu ra.k1
  2. Tính toán tổn thất, tổng hợp qua các bước thời gian trước đó (xem bên dưới).
  3. Backward pass: Tính toán độ dốc của tổn thất ghi tất cả các tham số, tích lũy qua các bước thời gian trước đó (điều này đòi hỏi phải lưu trữ tất cả các kích hoạt cho các bước thời gian này). Clip độ dốc để tránh vấn đề độ dốc phát nổ (hiếm khi xảy ra).k2
  4. Cập nhật các tham số (điều này xảy ra một lần trên mỗi đoạn, không tăng dần ở mỗi bước thời gian).
  5. Nếu xử lý nhiều khối của một chuỗi dài hơn, hãy lưu trữ trạng thái ẩn ở bước cuối cùng (sẽ được sử dụng để khởi tạo trạng thái ẩn cho đầu đoạn tiếp theo). Nếu chúng ta đã đến cuối chuỗi, hãy đặt lại bộ nhớ / trạng thái ẩn và di chuyển đến đầu chuỗi tiếp theo (hoặc bắt đầu chuỗi tương tự, nếu chỉ có một).
  6. Lặp lại từ bước 1.

Tổng thiệt hại như thế nào tùy thuộc vào và . Ví dụ: khi , tổn thất được tính tổng trong các bước thời gian trước đây , nhưng quy trình sẽ khác khi (xem Williams và Peng 1990).k1k2k1=k2k1=k2k2>k1

Tính toán và cập nhật độ được thực hiện mỗi bước thời gian vì nó rẻ hơn so với cập nhật ở mọi bước. Cập nhật nhiều lần trên mỗi chuỗi (tức là cài đặt nhỏ hơn độ dài chuỗi) có thể tăng tốc đào tạo vì cập nhật trọng lượng thường xuyên hơn.k1k1

Backpropagation chỉ được thực hiện cho các bước thời gian vì nó rẻ hơn về mặt tính toán so với truyền ngược về đầu chuỗi (sẽ yêu cầu lưu trữ và xử lý nhiều lần trong tất cả các bước thời gian). Các lớp được tính theo cách này là một xấp xỉ với độ dốc 'đúng' được tính theo tất cả các bước thời gian. Nhưng, do vấn đề độ dốc biến mất, độ dốc sẽ có xu hướng tiến về 0 sau một số bước thời gian; tuyên truyền vượt quá giới hạn này sẽ không mang lại lợi ích gì. Đặt quá ngắn có thể giới hạn thang đo thời gian mà mạng có thể tìm hiểu. Tuy nhiên, bộ nhớ của mạng không bị giới hạn ở các bước thời gian vì các đơn vị ẩn có thể lưu trữ thông tin ngoài khoảng thời gian này (ví dụ:k2k2k2).

Bên cạnh các cân nhắc tính toán, cài đặt phù hợp cho và phụ thuộc vào số liệu thống kê của dữ liệu (ví dụ: thang đo thời gian của các cấu trúc có liên quan để tạo đầu ra tốt). Họ có thể cũng phụ thuộc vào các chi tiết của mạng. Ví dụ, có một số kiến ​​trúc, thủ thuật khởi tạo, v.v ... được thiết kế để giảm thiểu vấn đề độ dốc phân rã.k1k2

Tùy chọn 1 của bạn ('backprop-khôn ngoan khung') tương ứng với việc đặt thành và theo số bước thời gian từ đầu câu đến điểm hiện tại. Tùy chọn 2 (' -khôn ngoan câu') tương ứng với việc đặt cả và cho độ dài câu. Cả hai đều là các cách tiếp cận hợp lệ (với các xem xét tính toán / hiệu suất như trên; # 1 sẽ khá chuyên sâu về mặt tính toán cho các chuỗi dài hơn). Cả hai cách tiếp cận này sẽ không được gọi là "cắt ngắn" vì quá trình truyền ngược xảy ra trên toàn bộ chuỗi. Các cài đặt khác của và là có thể; Tôi sẽ liệt kê một số ví dụ dưới đây.k11k2k1k2k1k2

Tài liệu tham khảo mô tả BPTT bị cắt ngắn (thủ tục, động lực, vấn đề thực tế):

  • Sutskever (2013) . Đào tạo mạng lưới thần kinh tái phát.
  • Mikolov (2012) . Mô hình ngôn ngữ thống kê dựa trên mạng lưới thần kinh.
    • Sử dụng RNN vanilla để xử lý dữ liệu văn bản dưới dạng một chuỗi các từ, ông khuyên nên đặt thành 10-20 từ và đến 5 từk1k2
    • Thực hiện nhiều cập nhật trên mỗi chuỗi (tức là nhỏ hơn độ dài chuỗi) hoạt động tốt hơn so với cập nhật ở cuối chuỗik1
    • Thực hiện cập nhật một lần trên mỗi đoạn tốt hơn so với tăng dần (có thể không ổn định)
  • Williams và Bành (1990) . Một thuật toán dựa trên độ dốc hiệu quả để đào tạo trực tuyến các quỹ đạo mạng lặp lại.
    • Đề xuất gốc (?) Của thuật toán
    • Họ thảo luận về sự lựa chọn của và (mà họ gọi là và ). Họ chỉ xem xét .k1k2hhk2k1
    • Lưu ý: Họ sử dụng cụm từ "BPTT (h; h ')" hoặc' thuật toán cải tiến 'để chỉ những gì các tài liệu tham khảo khác gọi là' BPTT cắt ngắn '. Họ sử dụng cụm từ 'BPTT cắt ngắn' để chỉ trường hợp đặc biệt trong đó .k1=1

Các ví dụ khác sử dụng BPTT rút gọn:

  • (Karpathy 2015). char-rnn.
    • Mô tả
    • Vanilla RNN xử lý tài liệu văn bản một ký tự một lần. Được đào tạo để dự đoán nhân vật tiếp theo. ký tự. Mạng được sử dụng để tạo văn bản mới theo phong cách của tài liệu đào tạo, với kết quả thú vị.k1=k2=25
  • Graves (2014) . Tạo chuỗi với các mạng thần kinh tái phát.
    • Xem phần về cách tạo các bài viết Wikipedia mô phỏng. Mạng LSTM xử lý dữ liệu văn bản dưới dạng chuỗi byte. Được đào tạo để dự đoán byte tiếp theo. byte. Bộ nhớ LSTM thiết lập lại sau mỗi byte.10 , 000k1=k2=10010,000
  • Sak và cộng sự. (2014) . Bộ nhớ dài hạn dựa trên kiến ​​trúc mạng thần kinh tái phát để nhận dạng giọng nói từ vựng lớn.
    • Mạng LSTM được sửa đổi, xử lý các chuỗi tính năng âm thanh. .k1=k2=20
  • Ollivier et al. (2015) . Đào tạo mạng tái phát trực tuyến mà không cần quay lại.
    • Điểm chính của bài viết này là đề xuất một thuật toán học tập khác, nhưng họ đã so sánh nó với BPTT bị cắt ngắn. Sử dụng RNN vanilla để dự đoán chuỗi ký hiệu. Chỉ đề cập đến nó ở đây để nói rằng họ đã sử dụng .k1=k2=15
  • Hồ Chí Minh và Schmidhuber (1997) . Trí nhớ ngắn hạn.
    • Họ mô tả một quy trình sửa đổi cho các LSTM

Đây là một câu trả lời nổi bật, và tôi ước rằng tôi có chỗ đứng trong diễn đàn này để trao một phần thưởng đáng kể cho nó. Đặc biệt hữu ích là các cuộc thảo luận cụ thể về k1 vs k2 để bối cảnh hóa hai trường hợp của tôi chống lại việc sử dụng chung hơn và các ví dụ số giống nhau.
Novak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.