English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

khách
1 / ?
trở lại bài học

SGD Thuần túy Không Thể Huấn luyện ANDREA

Hạ tầng Tối ưu: Stochastic Gradient Descent

Backprop tính toán gradient g cho mọi tham số. Stochastic gradient descent (SGD) thuần túy cập nhật mỗi tham số với p -= lr * g. Một learning rate, một hướng mỗi bước, không có bộ nhớ về các gradient quá khứ.


SGD thuần túy thất bại ở quy mô lớn vì hai lý do:


1. Gradient có độ lớn khác biệt rất lớn giữa các tham số. Một embedding cho token hiếm nhận gradient nhỏ hầu hết các bước; một layernorm scale nhận gradient lớn. Một learning rate không thể phù hợp cho cả hai.

2. Gradient dao động. Một mini-batch nhiễu từ corpus 16 nguồn đẩy tham số sang trái, rồi phải, rồi trái. SGD thuần túy lãng phí các bước tự đấu tranh với chính mình.


Adam (Kingma & Ba, 2015) khắc phục cả hai vấn đề bằng hai trung bình trượt cho mỗi tham số.

Moment Thứ Nhất & Moment Thứ Hai

m: Hướng Smoothed

Moment thứ nhất m lấy trung bình gradient gần đây theo cách hàm mũ:


m = beta1 m + (1 - beta1) g


với beta1 = 0.9. Sau vài bước, m mang theo hướng được làm mịn; một batch xấu khó làm nó lệch hướng.


v: Độ lớn được làm mịn

Moment thứ hai v lấy trung bình các gradient bình phương gần đây:


v = beta2 v + (1 - beta2) g^2


với beta2 = 0.999. v theo dõi độ lớn điển hình của gradient của từng tham số. Các tham số có gradient lớn sẽ có v lớn; các tham số có gradient nhỏ sẽ có v nhỏ.


Tốc Độ Học Thích Ứng Theo Từng Tham Số

Việc chia hướng đã làm mịn cho căn bậc hai của độ lớn đã làm mịn sẽ đưa mọi tham số về cùng một mức so sánh:


adam_step = m / sqrt(v + eps)


Các tiny-gradient embeddings được mở rộng tỷ lệ; các large-gradient layernorms được thu nhỏ tỷ lệ. Một lr toàn cục giờ đây phù hợp với mọi tham số.

Đọc các Moments

Hai tham số nhận cùng gradient `g = 0.1` ở bước này. Tham số A đã tích lũy `v = 0.0001` qua nhiều bước; tham số B có `v = 1.0`. Sử dụng `adam_step = g / sqrt(v + eps)`, tham số nào nhận cập nhật lớn hơn ở bước này, & tại sao Adam muốn như vậy?

Tại sao Các Bước Đầu Cần Hiệu Chỉnh Độ Chệch

Độ Chệch Khởi Động Lạnh

m & v bắt đầu từ zero. Sau bước 1, m = 0.1 g_1 & v = 0.001 g_1^2. Cả hai ước lượng đều undershoot một cách đáng kể so với trung bình dài hạn. Không có hiệu chỉnh, optimizer bắt đầu thận trọng & tăng dần chậm chạp, lãng phí những bước đầu quý giá khi các biểu diễn được hình thành.


Sự Hiệu Chỉnh

Adam scales mỗi ước lượng bằng 1 / (1 - beta^t) trong đó t là số bước:


m_hat = m / (1 - beta1^t)


v_hat = v / (1 - beta2^t)


Tại bước 1 với beta1 = 0.9, số chia (1 - 0.9) = 0.1, vì vậy m_hat = m / 0.1 = 10 * m. Ước lượng đã được hiệu chỉnh sai lệch khớp với những gì trung bình dài hạn dự đoán. Khi t tăng lên, beta^t tiến gần đến 0, hiệu chỉnh tiến gần đến 1, & các giá trị đã hiệu chỉnh & chưa hiệu chỉnh hội tụ.

Suy giảm Trọng số Tách rời (Đổi mới của AdamW)

Quy tắc hóa L2 so với Suy giảm Trọng số

Quy tắc hóa L2 cổ điển thêm một hình phạt vào hàm mất mát: L_total = L_data + (lambda / 2) sum(p^2). Backprop coi hình phạt đó như một phần của gradient: g_total = g_data + lambda p. Hạng L2 chảy qua các cập nhật m & v của Adam, được làm mịn & thay đổi tỷ lệ theo độ lớn từng tham số.


Loshchilov & Hutter (2019) đã chứng minh rằng việc làm mịn một regularizer qua Adam làm hỏng cả hai. Việc scaling thích ứng của Adam làm thu hẹp weight decay trên các tham số có gradient lớn (nơi decay nên chống overfitting mạnh nhất) & khuếch đại nó trên các tham số có gradient nhỏ.


AdamW: Áp dụng Decay Trực tiếp

AdamW tách biệt weight decay khỏi gradient. Decay được áp dụng trực tiếp cho mỗi tham số trong quá trình cập nhật tham số, không bao giờ chạm vào m hoặc v:


p -= lr (m_hat / (sqrt(v_hat) + eps) + weight_decay p)


Hai thành phần hiện đang điều khiển mỗi bước:


1. Thuật ngữ Adam: m_hat / (sqrt(v_hat) + eps) điều chỉnh lại hướng gradient theo lịch sử độ lớn từng tham số.

2. Thuật ngữ suy giảm: weight_decay * p thu nhỏ mọi tham số về zero, đồng đều, mà không qua quá trình làm mịn của Adam.


ANDREA-120M v2 đặt weight_decay = 0.01. Mỗi bước, mọi tham số thu nhỏ 1% về zero, ngoài những gì thuật ngữ Adam thực hiện.


AdamW Optimizer Step

Tại sao Decoupled Quan trọng

ANDREA-120M v1 sử dụng vanilla Adam (không có weight decay) & sụp đổ vào vòng lặp lặp lại ở bước 110K. v2 sử dụng AdamW với `weight_decay = 0.01` & tạo ra văn bản mạch lạc nhiều đoạn. Giải thích (a) thuật ngữ cụ thể nào được thêm vào trong AdamW mà vanilla Adam thiếu, & (b) tại sao đặt thuật ngữ đó BÊN TRONG gradient (classic L2) sẽ tệ hơn so với vị trí tách rời NGOÀI của AdamW.

Bằng chứng thực nghiệm

Sự sụp đổ của v1 (không có weight decay)

ANDREA-120M v1 được huấn luyện trong 165K bước với vanilla Adam. Các mẫu đầu ra:


- Bước 80K: region region region region region region region

- Bước 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '

- Bước 140K: games, games, games, games, games, games, games

- Bước 165K: Budy Budy Budy Budy Budy Budy Budy Budy Budy


Các con số loss vẫn ở mức hợp lý (EMA tối thiểu 3.23 tại bước 110K, so với ngẫu nhiên 9.04). Loss một mình che giấu sự sụp đổ lặp lại: một mô hình ghi nhớ một token mãi mãi sẽ đạt được cross-entropy thấp ở mọi bước mà token đó xuất hiện.


Ổn định v2 (weight_decay = 0.01)

v2 thêm AdamW (cộng với cắt gradient, làm ấm LR, giám sát mẫu). Tại bước ~112K, các mẫu được tạo ra:


- Vẹt Carolina được tuyên bố tuyệt chủng năm 1939 (chính xác về mặt sự thật)

- Phép biến đổi Fourier phân tích tín hiệu thành các thành phần tần số (định nghĩa sách giáo khoa)

- Tiếng mưa nhịp nhàng, Những dòng nước trên cửa sổ, Sự nghỉ ngơi khỏi nỗi đau cuộc sống (đáp ứng ràng buộc haiku)


Đánh giá bên ngoài chấm các mẫu v2 9.5/10, gọi chúng là "sự mạch lạc ấn tượng & giữ kiến thức ở quy mô này."


12M đã huấn luyện mà không cần AdamW. Tại sao?

ANDREA-12M được huấn luyện bằng Adam thuần túy mà không bị sụp đổ. Ở quy mô 12M tham số, các ma trận trọng số vẫn đủ nhỏ để việc điều chỉnh thích ứng của Adam không thể đẩy các trọng số riêng lẻ vào các độ lớn chạy trốn gây ra lặp lại. Ở quy mô 120M, độ lớn trọng số trôi xa hơn mỗi bước và tích lũy; sự suy giảm đồng đều áp dụng một lực phục hồi không đổi về phía zero. Sự suy giảm trọng số tách rời trở nên quan trọng hơn khi mô hình mở rộng quy mô.

Chọn weight_decay = 0.01

Tại sao `weight_decay = 0.01` có thể hoạt động tốt cho mô hình 120M tham số nhưng giá trị lớn gấp 100 lần (`weight_decay = 1.0`) lại phá hủy quá trình huấn luyện? Suy luận về quy tắc cập nhật `p -= lr * (adam_term + weight_decay * p)`. Chọn một giá trị đại diện `p`, thay `weight_decay = 1.0` cho một bước duy nhất, & mô tả điều gì xảy ra với `p` sau vài bước.

Các Hoạt Động Liên Quan

AdamW liên kết với ba hoạt động anh em trong khóa học này:


- Hoạt động 11: LR warmup + cosine decay. AdamW một mình không thể cứu mô hình khỏi tốc độ học peak tức thì trên trọng số mới khởi tạo. Warmup tăng dần lr qua 2000 bước để bias correction & weight decay của AdamW có thời gian ổn định các biểu diễn.

- Hoạt động 12: Gradient clipping. AdamW giả định gradient có độ lớn bị chặn. Các chuyển tiếp nguồn cứ mỗi 7 đến 42 bước trong bandit của ANDREA tạo ra các spike gradient thỉnh thoảng; clipping giới hạn chúng ở L2 norm 1.0 TRƯỚC khi AdamW chạm vào m, v, hoặc p.

- Hoạt động 13: Độ chính xác FP32 / FP16 / FP8. AdamW lưu trữ m & v cho mỗi tham số, làm gấp đôi dung lượng bộ nhớ của riêng trọng số. FP16 giảm một nửa dung lượng đó; FP8 giảm tiếp. Các lựa chọn độ chính xác tương tác với độ ổn định của optimizer.


AdamW, warmup, clipping, & precision tạo thành một bông cỏ bốn lá. Bỏ một lá, xem ANDREA sụp đổ.

Phản ánh về Optimizer

Chọn một mẫu ANDREA-120M v1 (ví dụ: `region region region region`) & mô tả cách thuật ngữ `weight_decay * p` của AdamW, được áp dụng mỗi bước từ bước 0, sẽ ngăn chặn chế độ thất bại cụ thể đó. Một đoạn văn.