Độ chính xác hỗn hợp & chia tỷ lệ mất mát

Cách các mô hình thực sự học, từ gradient descent thuần túy đến Adam

Huấn luyện với độ chính xác hỗn hợp dùng các định dạng số nhỏ hơn để tăng tốc độ và tiết kiệm bộ nhớ. Thay vì lưu mọi phép tính ở độ chính xác đầy đủ (số thực dấu phẩy động 32-bit chuẩn), nhiều phép toán dùng float16 hoặc bfloat16: các định dạng 16-bit chiếm một nửa bộ nhớ, đổi lại độ chính xác thấp hơn và, với float16, một dải giá trị biểu diễn được hẹp hơn.

Rủi ro nằm ở dải giá trị số. Một số gradient rất nhỏ. Nếu một số nhỏ bị làm tròn về 0, bộ tối ưu hóa mất thông tin. Chia tỷ lệ mất mát bảo vệ những gradient nhỏ đó bằng cách nhân mất mát lên trước khi lan truyền ngược, rồi chia gradient trở lại xuống.

Một cái cân bếp làm tròn tới từng gram nguyên có thể bỏ sót một nhúm gia vị nhỏ xíu. Nếu bạn cân mười nhúm giống hệt nhau cùng lúc, cái cân có thể nhìn thấy tổng số đó. Rồi bạn chia cho mười để lấy lại một nhúm. Chia tỷ lệ mất mát dùng đúng mẹo đó: khiến giá trị nhỏ dễ biểu diễn hơn, rồi chia tỷ lệ nó trở lại. Hình bên dưới là lời nhắc về điều đang bị đe dọa. Đi xuống chỉ hoạt động nếu gradient của mỗi bước sống sót qua phép tính; độ chính xác không thay đổi vòng lặp, nó quyết định liệu những độ dốc nhỏ xíu gần điểm cực tiểu có còn nhìn thấy được với vòng lặp đó hay không.

Vị trí của nó trong MLĐộ chính xác hỗn hợp là một trong những lý do các mạng nơ-ron lớn huấn luyện nhanh trên phần cứng hiện đại. Các bộ tối ưu hóa vẫn cần cùng những khái niệm đó, nhưng thang đo số học trở thành một phần của công thức huấn luyện.
▶ Độ chính xác hỗn hợp & chia tỷ lệ mất mát
← Bình phương tối thiểu luân phiênChia tỷ lệ kích thước batch →