Xuất bản vào

Float32, Float16 hoặc BFloat16!

Tác giả

Tại sao điều đó lại quan trọng đối với Học sâu?

Image

Đó chỉ là các mức độ chính xác khác nhau. Float32 là một cách để biểu diễn số dấu phẩy động với 32 bit (1 hoặc 0), và Float16 / BFloat16 là một cách để biểu diễn cùng một số với chỉ 16 bit. Với Float32, chúng ta phân bổ bit đầu tiên để biểu diễn dấu, 8 bit tiếp theo để biểu diễn số mũ, và 23 bit tiếp theo để biểu diễn các điểm thập phân (còn gọi là Mantissa). Chúng ta có thể chuyển từ biểu diễn bit sang biểu diễn thập phân bằng cách sử dụng công thức đơn giản:

Float32 = (-1)^dấu * 2^(số mũ - 127) * (1 + mantissa)

Và điều này có thể dao động từ -3.4e^38 đến 3.4e^38.

Float16 sử dụng 1 bit cho dấu, 5 bit cho số mũ, và 10 bit cho Mantissa với công thức:

Float16 = (-1)^dấu * 2^(số mũ - 15) * (1 + mantissa)

Và phạm vi là từ -6.55e^4 đến 6.55e^4 (vì vậy phạm vi nhỏ hơn nhiều!). Để chuyển đổi từ Float32 sang Float16, bạn chỉ cần loại bỏ các chữ số không thể phù hợp trong 5 và 10 bit được phân bổ cho số mũ và Mantissa. Đối với Mantissa, bạn chỉ đang tạo ra một lỗi làm tròn, nhưng nếu số Float32 lớn hơn 6.55e^4, bạn sẽ tạo ra một lỗi tràn số dấu phẩy động! Vì vậy, rất có thể xảy ra lỗi chuyển đổi từ Float32 sang Float16.

Brain Float 16 (BFloat16) là một biểu diễn dấu phẩy động khác trong 16 bit. Chúng ta cho ít độ chính xác thập phân hơn nhưng có phạm vi như Float32. Chúng ta có 8 bit cho số mũ và 7 bit cho Mantissa với cùng công thức chuyển đổi:

BFloat16 = (-1)^dấu * 2^(số mũ - 127) * (1 + mantissa)

Cho phạm vi giống như Float32 [-3.4e^38 và 3.4e^38]. Vì vậy, chuyển đổi sang BFloat16 từ Float32 là đơn giản vì bạn chỉ cần làm tròn xuống Mantissa.

Điều này khá quan trọng cho Học sâu vì trong thuật toán lan truyền ngược, các tham số mô hình được cập nhật bởi một bộ tối ưu hóa gradient descent (ví dụ, Adam), và các phép tính được thực hiện với độ chính xác Float32 để đảm bảo ít lỗi làm tròn hơn. Các tham số mô hình và các gradient thường được lưu trữ trong bộ nhớ ở dạng Float16 để giảm áp lực lên bộ nhớ, vì vậy chúng ta cần chuyển đổi qua lại giữa Float16 và Float32. BFloat16 là một lựa chọn tốt vì nó ngăn chặn lỗi tràn số dấu phẩy động trong khi vẫn giữ đủ độ chính xác cho các bước tiến và lùi của thuật toán lan truyền ngược.

TÁC GIẢ

Về ABN Asia: AiUTOMATING PEOPLE, ABN Asia được thành lập từ năm 2012, là một công ty xuất phát từ học thuật, do những giảng viên, cựu du học sinh Hungary, Hà Lan, Nga, Đức, và Nhật Bản sáng lập. Chúng tôi chia sẻ đam mê chung và tầm nhìn vững chắc về công nghệ, mang đến sự đổi mới và chất lượng đỉnh cao cho khách hàng. Phương châm của chúng tôi là: Tốt hơn. Nhanh hơn. An toàn hơn. Trong nhiều trường hợp: Rẻ hơn.

Hãy liên hệ với chúng tôi khi Quý doanh nghiệp có các nhu cầu về dịch vụ công nghệ thông tin, tư vấn chuyển đổi số, tìm kiếm các giải pháp phần mềm phù hợp, hoặc nếu Quý doanh nghiệp có đấu thầu CNTT (RFP) để chúng tôi tham dự. Quý doanh nghiệp có thể liên hệ với chúng tôi qua địa chỉ email [email protected]. Chúng tôi sẵn lòng hỗ trợ với mọi nhu cầu công nghệ của Quý doanh nghiệp.

ABNAsia.org

© ABN ASIA

AbnAsia.org Software