Mã hóa vị trí trong mô hình máy biến áp là gì?


22

Tôi mới biết về ML và đây là câu hỏi đầu tiên của tôi ở đây, rất xin lỗi nếu câu hỏi của tôi là ngớ ngẩn.

Tôi đang cố đọc và hiểu bài báo Chú ý là tất cả những gì bạn cần và trong đó, có một hình ảnh:

nhập mô tả hình ảnh ở đây

Tôi không biết mã hóa vị trí là gì. bằng cách nghe một số video trên youtube tôi đã phát hiện ra rằng đó là một sự nhúng có cả ý nghĩa và vị trí của một từ trong đó và có liên quan đến hoặcsin(x)cos(x)

nhưng tôi không thể hiểu chính xác nó là gì và chính xác nó đang làm điều đó như thế nào. vì vậy tôi ở đây để được giúp đỡ cảm ơn trước.

Câu trả lời:


27

Ví dụ: đối với từ ở vị trí trong chuỗi đầu vào , với nhúng 4 chiều và , thao tác sẽ là wpos[0,L1]w=(w0,,wL1)ewdmodel=4

ew=ew+[sin(pos100000),cos(pos100000),sin(pos100002/4),cos(pos100002/4)]=ew+[sin(pos),cos(pos),sin(pos100),cos(pos100)]

trong đó công thức mã hóa vị trí như sau với (do đó ) trong bài báo gốc.

PE(pos,2i)=sin(pos100002i/dmodel),
PE(pos,2i+1)=cos(pos100002i/dmodel).
dmodel=512i[0,255]

Kỹ thuật này được sử dụng vì không có khái niệm về trật tự từ (từ 1, từ 2, ..) trong kiến ​​trúc đề xuất. Tất cả các từ của chuỗi đầu vào được đưa vào mạng mà không có thứ tự hoặc vị trí đặc biệt (không giống như các kiến ​​trúc RNN hoặc ConvNet thông thường), do đó, mô hình không biết các từ được sắp xếp như thế nào. Do đó, tín hiệu phụ thuộc vào vị trí được thêm vào mỗi từ nhúng để giúp mô hình kết hợp thứ tự các từ. Dựa trên các thí nghiệm, việc bổ sung này không chỉ tránh phá hủy thông tin nhúng mà còn thêm thông tin vị trí quan trọng. Trong trường hợp RNN, chúng tôi cung cấp các từ liên tục cho RNN, tức là từ thứ được cung cấp ở bước , giúp mô hình kết hợp thứ tự các từ.nn

Bài viết này của Jay Alammar giải thích bài báo với hình ảnh tuyệt vời. Thật không may, ví dụ của nó cho mã hóa vị trí là không chính xác tại thời điểm này (nó sử dụng cho nửa đầu của kích thước nhúng và cho nửa sau, thay vì sử dụng cho các chỉ số chẵn và cho các chỉ số lẻ).sincossincos


1
Bạn cũng có bài viết tuyệt vời này hoàn toàn tập trung vào việc nhúng vị trí: kazemnejad.com/blog/ mẹo
Yohan Obadia

6

Mã hóa vị trí là sự biểu diễn lại các giá trị của một từ và vị trí của nó trong một câu (được cho là không giống nhau ở đầu mà ở cuối hoặc giữa).

Nhưng bạn phải tính đến việc các câu có thể có độ dài bất kỳ, vì vậy việc nói từ "" X "là từ thứ ba trong câu 'không có nghĩa gì nếu có các câu có độ dài khác nhau: Câu 3 trong câu 3 từ hoàn toàn khác với thứ 3 trong một câu 20 từ.

Những gì một bộ mã hóa vị trí làm là để có được sự trợ giúp về tính chu kỳ của các hàm và để trả về thông tin về vị trí của một từ trong câu.sin(x)cos(x)


2
cảm ơn bạn. bạn có thể giải thích về cách bộ mã hóa vị trí này thực hiện điều này với và không? c o ssincos
Peyman

1

Để thêm vào các câu trả lời khác, triển khai ref của OpenAI tính toán nó trong không gian log tự nhiên (để cải thiện độ chính xác, tôi nghĩ vậy. Không chắc họ có thể sử dụng log trong cơ sở 2 không). Họ đã không đưa ra được mã hóa. Dưới đây là thế hệ bảng tra cứu PE được viết lại trong C dưới dạng vòng lặp for:

int d_model = 512, max_len = 5000;
double pe[max_len][d_model];

for (int i = 0; i < max_len; i++) {
   for (int k = 0; k < d_model; k = k + 2) {
      double div_term = exp(k * -log(10000.0) / d_model);
      pe[i][k] = sin(i * div_term);
      pe[i][k + 1] = cos(i * div_term);
   }
}
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.