Thị hàm Tanh (Nguồn: [5])

Một phần của tài liệu Tổng hợp âm nhạc sử dụng học sâu (Trang 26)

2.4.1.2 Hàm Sigmoid Cơng thức: a=sigmoid(z) = 1 1+e−z (2.2) Hình 2.6:Đồ thị hàm Sigmoid (Nguồn: [5]). 2.4.1.3 Hàm Softmax

Hàm softmax tính tất cả các giá trịaidựa vào các giá trịzithỏa mãn các điều kiện: cácaicó giá trị dương, tổng cácaibằng 1.

ai= exp(zi)

∑Cj=1exp(zj)

∀i=1,2, ...,C

Hình 2.7:Ví dụ về đầu vào và đầu ra của hàm softmax với 3 lớp (Nguồn: [5]).

2.4.1.4 Hàm GELU

Hàm GELU (Gaussian Error Linear Unit) làm hàm kích hoạt được định nghĩa như sau:

GELU(x) =xP(X≤x) =xΦ(x) =x.1 2[1+er f(x/√ 2)] ≈0.5x(1+tanh[p 2/π(x+0.044715x3)]) or xσ(1.702x) if X∼N (0,1) (2.4)

Hình 2.8:GELU(µ =0,σ =1), ReLU, and ELU(α =1)(Nguồn: [9]).

2.5 Mơ hình mạng Recurrent Neural Networks

2.5.1 Tổng quan

Mạng neuron hồi quy (Recurrent Neural Network - RNN) [10] [11] được phát triển lần đầu tiên vào những năm 1980. Cấu trúc của nó bao gồm một lớp đầu vào, một hoặc nhiều lớp ẩn và một lớp đầu ra. Các RNN có các cấu trúc giống như chuỗi lặp lại các mô-đun với ý tưởng đằng sau là sử dụng các mô-đun này làm bộ nhớ để lưu trữ thông tin quan trọng từ các bước xử lý trước đó.

Khơng giống như các mạng neuron feedforward (là mạng thần kinh nhân tạo trong đó các kết nối giữa các nút không tạo thành một chu kỳ), RNN bao gồm một vòng lặp phản hồi cho phép mạng chấp nhận một chuỗi các đầu vào. Điều này có nghĩa là đầu ra từ bước t-1 được đưa trở lại vào mạng để tác động đến kết quả của bước t và cứ thế cho mỗi bước tiếp theo. Do đó, RNN đã thành cơng trong các vấn đề học có ghi nhớ.

Kiến trúc tổng quát của mạng RNN [10]: với:

• xt là đầu vào tại bướct.

• U,V,W là các ma trận trọng số.

• st là trạng thái ẩn tại bướct. Đây được xem như bộ nhớ của mạng RNN và được tính bằng

cơng thức:

Hình 2.9:Kiến trúc cơ bản của mạng RNN (Nguồn: [10]).

Hàm f là một hàm activation như được giới thiệu ở trên, thông thường là hàmTanhhoặc

ReLU. Ở bước tính tốn đầu tiên,st−1chưa có giá trị nên có thể khởi tạo một cách ngẫu nhiên hoặc được gán bằng 0.

• ot là đầu ra tại bướct, được tính bằng:

ot=g(V st)

Hàmgcũng là một hàm activation như f và thường là hàmTanhhoặcReLU.

2.5.2 Một số ứng dụng của RNN

Trong phần này, một số ứng dụng của RNN được trình bày như sau:

2.5.2.1 Mơ hình One-to-one

Hình 2.10:One-to-one RNN (Nguồn: [12]).Mơ hình này tương tự với mơ hình của MLP Mơ hình này tương tự với mơ hình của MLP

2.5.2.2 Mơ hình One-to-many

Hình 2.11:One-to-one RNN (Nguồn: [12]).

Với một dữ liệu đầu vào, mơ hình này sinh ra nhiều dữ liệu đầu ra, phù hợp với các bài tốn như tạo bình luận cho ảnh (Image Captioning), sinh văn bản (Text Generation), sinh âm nhạc (Music Generation).

2.5.2.3 Mơ hình Many-to-one

Hình 2.12:Many-to-one RNN (Nguồn: [12]).

Mơ hình này tính tốn trên tồn bộ dữ liệu đầu vào và cho ra duy nhất một đầu ra, đo đó phù hợp với các bài tốn phân loại văn bản (Text Classification), phân loại sắc thái văn bản (Sentiment Classification).

2.5.2.4 Mơ hình Many-to-many loại 1

Mơ hình này tính tốn từng giá trị đầu ra cho mỗi giá trị đầu vào, do đó được sử dụng trong bài tốn nhận biết thực thể có tên (Name Entity Recognition) hoặc gán nhán từ loại (Part of Speech Tagging).

Hình 2.13:Many-to-many RNN loại 1(Nguồn: [12]).

Hình 2.14:Many-to-many RNN loại 2 (Nguồn: [12]).

2.5.2.5 Mơ hình Many-to-many loại 2

Mơ hình này tổng hợp các giá trị đầu vào sau đó sinh ra các giá trị đầu ra và thường được sử dụng trong bài tốn dịch máy (Machine Translation).

2.5.3 Mơ hình mạng Long Short Term Memory

Về lý thuyết, RNN có thể sử dụng tất cả các thông tin từ bước đầu tiên cho đến bước hiện tại để tính tốn giá trị đầu ra ở bước hiện tại, nhưng vì càng qua nhiều bước tính tốn, đạo hàm càng tiêu biến dẫn đến việc RNN "quên" các thông tin ở quá xa so với bước hiện tại. Do đó, khi sử dụng mơ hình RNN sẽ xảy ra vấn đề mơ hình khơng nhớ được các thơng tin q dài, RNN sẽ "quên dần" các thơng tin ở các bước tính tốn trước. Để giải quyết vấn đề này, có nhiều biến thể của RNN được đề xuất, phổ biến trong đó là Long Short Term Memory (LSTM).

Long Short-Term Memory (LSTM) [11], một sự cải tiến của RNN, được giới thiệu bởi Hochre- iter và Schmidhuber để giải quyết các vấn đề về những hạn chế đã nói ở trên của RNN bằng cách thêm các tương tác bổ sung cho mỗi mô-đun. LSTM là một loại RNN đặc biệt, có khả năng học các phụ thuộc dài hạn và ghi nhớ thơng tin trong thời gian dài. Mơ hình LSTM được tổ chức dưới dạng cấu trúc chuỗi,tuy nhiên, mơ-đun lặp lại có cấu trúc khác nhau. Thay vì một mạng thần kinh duy nhất như mạng RNN tiêu chuẩn, nó bao gồm bốn lớp tương tác khác nhau.

Hình 2.15:Kiến trúc của LSTM (Nguồn: [11]).

Kiến trúc của LSTM [11] phức tạp hơn RNN rất nhiều. Để nhớ được nhiều thông tin, LSTM sử dụng các cổng để giữ lại các thông tin quan trọng và bỏ đi những thông tin dư thừa. Thành phần quan trọng nhất của LSTM làcell state, đây chính là bộ nhớ của LSTM, ngồi ra cịn một thành

phần khác làhidden state. Cell state và hidden state ở thời điểmtđược kí hiệu làCt vàht. Cell state và hidden state sẽ lần lượt được cập nhật ở mỗi thời điểm thơng qua các cổng, chi tiết như sau:

• Cổng forget giúp tính tốn các thơng tin cần loại bỏ:

ft=σ Wf[ht−1,xt] +bf

• Cổng input giúp tính tốn các thơng tin cần giữ lại:

it =σ(Wi[ht−1,xt] +bi)

• Cổng output giúp tính tốn các thơng tin cần xuất ra ở bước hiện tại:

ot =σ(Wo[ht−1,xt] +bo)

• Cập nhật cell state bằng cách sử dụng cổng input và cổng forget:

Ct= ft∗Ct−1+it∗C˜t

vớiC˜t được tính bằng:

˜

• Cập nhật hidden state bằng cách sử dụng cổng output:

ht =ot∗tanh(Ct)

2.6 Mơ hình Seq2Seq

Mơ hình Sequence to Sequence (seq2seq) [13] dựa trên kiến trúc Encoder - Decoder [14] để tạo ra chuỗi đầu ra từ chuỗi đầu vào, thể hiện trong Hình 2.16. Cả bộ Encoder và Decoder đều sử dụng mạng nơ-ron hồi tiếp (RNN) để xử lý các chuỗi đầu vào có độ dài khác nhau. Trạng thái ẩn của bộ Decoder được khởi tạo trực tiếp từ trạng thái ẩn của bộ Encoder, chuyển thơng tin từ Encoder sang Decoder.

Hình 2.16:Minh hoạ kiến trúc mơ hình Seq2Seq (Nguồn: [15])Đơi nét về kiến trúc Encoder-Decoder: Đơi nét về kiến trúc Encoder-Decoder:

• Kiến trúc Encoder-Decoder là một design pattern cho mạng nơ-ron, chủ yếu được sử dụng trong xử lý ngơn ngữ tự nhiên.

• Encoder là một mạng (kết nối đầy đủ - FC, nơ-ron tích chập - CNN, nơ-ron hồi tiếp - RNN, . . . ) nhận đầu vào và trả về một ánh xạ đặc trưng là một vector hay một tensor.

• Decoder là một mạng (thường có giống kiến trúc mạng NN của Encoder) nhận vector đặc trưng từ bộ mã hoá và đưa ra kết quả gần khớp nhất với đầu vào thực tế hoặc đầu ra mong muốn.

2.6.1 Chi tiết về bộ mã hóa - Encoder của mơ hình Seq2Seq

Bộ mã hóa của mơ hình seq2seq biến đổi và mã hóa chuỗi đầu vào với các độ dài khác nhau thành một vecto ngữ cảnhcvới độ dài cố định. Giả sử có một chuỗi đầu vàox1, . . . ,xT , trong đóxt là từ thứt. Bởi vì bộ Encoder đa phần sẽ được thiết kế từ RNN nên tại thời điểm t, mơ

hình RNN sẽ có hai vector đầu vào: vector đặc trưngxt của xt và trạng thái ẩn của bước thời gian trước đóht−1. Ta ký hiệu phép chuyển đổi của các trạng thái ẩn trong RNN bằng hàm f:

Tiếp theo, Encoder nắm bắt thông tin của tất cả các trạng thái ẩn và mã hóa chúng thành vector ngữ cảnhcbằng hàmq:

c=q(h1, ...,hT

Ví dụ, nếu chúng ta chọn qlà q(h1, ...,hT) =hT , thì vector ngữ cảnh sẽ là trạng thái ẩn của bước thời gian cuối cùnghT.

Cho đến nay ta mới mơ tả bộ mã hóa sử dụng mạng RNN một chiều, ở đó trạng thái ẩn của mỗi bước thời gian chỉ phụ thuộc vào các bước thời gian trước. Ta cũng có thể sử dụng các dạng RNN khác nhau như GRU, LSTM, hay RNN hai chiều để mã hóa chuỗi đầu vào.

2.6.2 Chi tiết về bộ giải mã - Decoder của mơ hình Seq2Seq

Như đã giới thiệu, vector ngữ cảnhcmã hóa thơng tin của tồn bộ chuỗi đầu vàox1, . . . ,xT. Giả sử đầu ra của tập huấn luyện lày1, . . . ,yT′ . Tại mỗi bước thời giant′, xác suất có điều kiện của đầu rayt′sẽ phụ thuộc vào đầu ra trước đóy1, . . . ,yt′−1và vector ngữ cảnhc, tức

P(yt′|y1, ...,yt′−1,c)

Do đó, chúng ta có thể sử dụng một mạng RNN khác trong bộ giải mã. Tại mỗi bước thời gian

t′, bộ giải mã cập nhật trạng thái ẩn của nó thơng qua ba đầu vào: vector đặc trưngyt′−1 của

yt′−1, vector ngữ cảnhcvà trạng thái ẩn tại bước thời gian trước đóst′−1. Hàmgdưới đây biểu diễn quá trình biến đổi trạng thái ẩn của mạng RNN trong bộ giải mã:

st′=g(yt′−1,c,st′−1)

2.7 Cơ chế Attention

Trong mục 2.6, chúng ta dùng mạng hồi tiếp RNN để mã hóa thơng tin của chuỗi nguồn đầu vào thành trạng thái ẩn và truyền nó tới bộ Decoder để sinh chuỗi đích. Một token trong chuỗi đích có thể chỉ liên quan mật thiết tới một vài token chứ khơng nhất thiết là tồn bộ token trong chuỗi nguồn. Ví dụ, khi dịch “Hello world.” thành “Bonjour le monde.”, từ “Bonjour” ánh xạ tới từ “Hello” và từ “monde” ánh xạ tới từ “world”. Trong mơ hình seq2seq, Decoder có thể ngầm chọn thơng tin tương ứng từ trạng thái ẩn được truyền đến từ bộ mã hóa. Tuy nhiên, cơ chế tập trung (attention mechanism) thực hiện phép chọn này một cách tường minh.

Cơ chế tập trung có thể được coi là phép gộp tổng quát. Nó gộp đầu vào dựa trên các trọng số khác nhau. Thành phần cốt lõi của cơ chế này là tầng attention. Những tầng này với đầu vào được gọi ngắn gọn là câu truy vấn (query). Với mỗi câu truy vấn, đầu ra sẽ được trả về dựa trên bộ nhớ là tập các cặp key-value được mã hóa trong tầng attention này. Cụ thể, giả sử bộ nhớ chứan cặp vector key-value, (k1,v1), . . . ,(kn,vn), với ki∈Rdk,vi∈Rdv. Với mỗi vector truy vấnq∈Rdq, tầng tập trung trả về đầu rao∈Rdvcó cùng kích thước với vector giá trị.

Hình 2.17 minh họa cách tính tốn đầu ra của tầng tập trung, chúng ta sử dụng hàm tính điểmα

để đo độ tương đồng giữa câu truy vấn và các khóa. Sau đó, với mỗi khóa(k1,v1), . . . ,(kn,vn), ta tính điểma1, . . . ,annhư sau:

Hình 2.17:Minh hoạ cơ chế Attention (Nguồn: [15])

Tiếp theo, chúng ta sử dụng hàm softmax để thu được các trọng số tập trung (attention weights), cụ thể:

b=softmax(a), bi= exp(ai)

∑jexp(aj), b= [b1, ...,bn] T

Cuối cùng, đầu ra của tầng là tổng trọng số của các giá trị:

o= n

i=1 bivi

Cách lựa chọn hàm tính điểm α khác nhau sẽ tạo ra các tầng attention khác nhau. Hai tầng attention phổ biến nhất hiện nay: tập trung tích vơ hướng và tập trung perceptron đa tầng.

2.7.1 Tầng tập trung tích vơ hướng - Dot product attention

Giả định rằng câu truy vấn có cùng kích thước chiều với khóa, cụ thể làq,ki∈Rd với mọii.

Tầng tập trung tích vơ hướng sẽ tính điểm bằng cách lấy tích vơ hướng giữa câu truy vấn và khóa, sau đó chia cho√dđể giảm thiểu ảnh hưởng không liên quan của số chiềudlên điểm số. Nói cách khác,

α(q,k) =hq,ki/√

d

Mở rộng ra từ các câu truy vấn và khóa một chiều, chúng ta ln có thể tổng qt hóa chúng lên thành các giá trị truy vấn và khóa đa chiều. Giả định rằngQ∈Rm×d chứamcâu truy vấn vàK∈Rn×dchứa tồn bộnkhóa. Chúng ta có thể tính tồn bộm×nđiểm số như sau:

α(Q,K) =QK⊤/√

2.7.2 Tập trung perceptron đa tầng - Multilayer perceptron attention

Trong cơ chế tập trung perceptron đa tầng (multilayer perceptron attention), chúng ta chiếu cả câu truy vấn và các khóa lênRhbằng các tham số trọng số được học. Giả định rằng các trọng số được học làWk∈Rh×dk,Wq∈Rh×dq vàv∈Rh. Hàm tính điểm sẽ được định nghĩa như sau

α(Q,K) =v⊤tanh(Wkk+Wqq)

Một cách trực quan, ta có thể tưởng tượngWkk+Wqqchính là việc nối khóa và giá trị lại với nhau theo chiều đặc trưng và đưa chúng qua perceptron có một tầng ẩn với kích thước làhvà tầng đầu ra với kích thước là 1 . Trong tầng ẩn này, hàm kích hoạt làtanh và khơng có hệ số điều chỉnh.

2.7.3 Mơ hình Seq2Seq áp dụng Cơ chế Attention

Bộ nhớ của tầng attention ở đây bao gồm tất cả thông tin mà Encoder đã được học — đầu ra của Encoder tại từng bước thời gian. Trong quá trình giải mã, đầu ra của bộ Decoder tại bước thời gian trước đó được sử dụng làm câu truy vấn. Đầu ra của mơ hình tập trung có thể được hiểu là thông tin ngữ cảnh của chuỗi, phần ngữ cảnh này được ghép nối với đầu vào của Decoder và kết quả được đưa vào bộ này.

Hình 2.18:Minh hoạ mơ hình Seq2seq kết hợp cơ chế Attention (Nguồn: [15])

Do Encoder của mơ hình Seq2seq áp dụng cơ chế tập trung giống với bộ mã hóa của Seq2Seq ở phần 2.6 nên ở phần này, chúng ta sẽ chỉ tập trung vào bộ Decoder. Ta thêm tầng tập trung perceptron đa tầng (MLP) có cùng kích thước ẩn với tầng LSTM trong bộ này. Sau đó ta khởi tạo trạng thái của bộ Decoder bằng cách truyền vào ba đầu ra thu được từ Encoder:

Đầu ra của Encoder tại tất cả các bước thời gian:được sử dụng như bộ nhớ của tầng attention có cùng các key và value.

Trạng thái ẩn của Encoder tại bước thời gian cuối cùng:được sử dụng làm trạng thái ẩn ban đầu của Decoder.

Độ dài hợp lệ của Encoder để tầng tập trung có thể bỏ qua những token đệm có trong đầu ra của Encoder.

Ở mỗi bước thời gian trong quá trình giải mã, ta sử dụng trạng thái ẩn của tầng RNN cuối cùng làm câu truy vấn cho tầng tập trung. Đầu ra của mơ hình tập trung sau đó được ghép nối với vector embedding đầu vào để đưa vào tầng RNN. Mặc dù trạng thái ẩn của tầng RNN cũng chứa thông tin từ bộ giải mã ở các bước thời gian trước đó nhưng đầu ra của tầng tập trung sẽ lựa chọn các đầu ra của bộ mã hóa một cách tường minh dựa vào độ dài hợp lệ của bộ mã hóa nhằm loại bỏ những thơng tin khơng liên quan.

2.7.4 Mơ hình Multihead-Attention

Trước khi thảo luận về tầng multihead-attention, hãy cùng tìm hiểu qua về kiến trúc Self- Attention [16]. Tương tự cơ chế attention, kiến trúc này cũng có câu truy vấn, khóa và giá trị nhưng chúng được sao chép từ các phần tử trong chuỗi đầu vào tầng tự tập trung trả về một đầu ra tuần tự có cùng độ dài với đầu vào. So với tầng hồi tiếp, các phần tử đầu ra của tầng tự tập trung có thể được tính tốn song song, do đó việc xây dựng các đoạn mã tốc độ cao khá dễ dàng.

Hình 2.19:Minh hoạ kiến trúc Self-Attention (Nguồn: [15])

Multihead-Attention [16] bao gồmhđầu là các tầng tự tập trung song song. Trước khi đưa vào mỗi đầu, ta chiếu các câu truy vấn, khóa và giá trị qua ba tầng dày đặc với kích thước ẩn lần lượt làpq, pkvà pv. Đầu ra của đầu này được nối lại và sau đó được xử lý bởi một tầng dày đặc cuối

Một phần của tài liệu Tổng hợp âm nhạc sử dụng học sâu (Trang 26)

Tải bản đầy đủ (PDF)

(94 trang)