Tháng Bảy 6, 2020 Ngoc Quynh

Tạo bản nhạc cổ điển với Neural Networks

Neural Networks là chuỗi những thuật toán được đưa ra để hỗ trợ tìm kiếm những mối quan hệ cơ bản của một tập hợp dữ liệu dựa vào việc bắt chước cách thức hoạt động từ não bộ con người. Tuy là thuật toán nhưng Neural Networks đã được ứng dụng vào trong âm nhạc như thế nào? Hãy cùng chúng tôi theo dõi câu chuyện của các nghệ sĩ nhé.

Làm quen với  các nghệ sĩ tạo ra bài hát cổ điển bằng Neural Networks

Christine McLeavey Payne – Dự án gần đây của cô là Clara – một mạng lưới thần kinh bộ nhớ ngắn hạn (LSTM) bao gồm nhạc piano và nhạc thính phòng. Chỉ cần cung cấp cho Clara một vài đoạn nhạc ban đầu, và Clara sẽ tìm ra những gì bạn nên chơi tiếp theo.

Christine là thành viên của Đội ngũ kỹ thuật tại OpenAI, một công ty nghiên cứu AI phi lợi nhuận tập trung vào khám phá và tiếp cận đến con đường dẫn đến AI. Tại OpenAI, Christine tập trung vào Multiagent Learning (Học đa năng), nghiên cứu cách các tác tử (agent) học các hành vi tiên tiến bằng cách cạnh tranh hợp tác với các tác tử khác, thay vì những gì họ có thể tự học trong môi trường.

Một agent là một thực thể có thể cảm nhận môi trường thông qua các cảm biến và phản ứng lại mô trường thông qua các cơ quan phản ứng kích thích. Các Agents tự chủ là các hệ thống tính toán trong môi trường thay đổi phức tạp, chúng cảm nhận và phản ứng tự động trong môi trường này, và thực thi nhiệm vụ hay công việc nó đã được kế để hoàn thành.

Theo Wooldridge và Jennings, hệ thống Multi-Agent (đa tác tử) bao gồm các Agent giao tiếp với nhau, trong đó các Agent sẽ hoạt động tự chủ với những mục tiêu và động cơ khác nhau. MAS rất có lợi trong thực tế vì nó giúp con người giải quyết được nhiều bài toán khó mà các hệ thống đồng nhất khác không giải quyết được như: dự báo thiên tai, mô phỏng cấu trúc xã hội… Các MAS được nghiên cứu và sử dụng hiện nay đa phần là dựa trên các agents phần mềm (software agents).

Christine cũng là một nghệ sĩ piano cổ điển tài năng – cô ấy đã tốt nghiệp trường Juilliard và là nghệ sĩ piano sáng lập ra Consemble San Francisco. Cô cũng có bằng Thạc sĩ Khoa học Thần kinh (Neuroscience) của Đại học Stanford và cô ấy có hai đứa con. Cô ấy là người tuyệt vời nhất trong vũ trụ.

Tôi rất vui mừng được chia sẻ cuộc trò chuyện của mình với Christine cho cuộc phỏng vấn Humans of Machine Learning (#humansofml) này. Trong bài viết này, chúng ta sẽ đào sâu vào mạng lưới thần kinh đằng sau Clara, cũng như hành trình của chính Christine với AI và Deep Learning.

Chúng ta hãy tìm hiểu rõ hơn Clare hoạt động như thế nào?

Clara được tạo ra dựa trên ý tưởng rằng bạn có thể tạo ra âm nhạc giống như cách bạn tạo ra ngôn ngữ.

Khi chúng tôi huấn luyện, đào tạo một mô hình ngôn ngữ, chúng tôi cung cấp cho mạng nơ-ron một đoạn văn và sau đó yêu cầu nó dự đoán từ tiếp theo (“to be or not to ___”). Một khi bạn có một mô hình tốt để dự đoán từ tiếp theo, bạn có thể dễ dàng biến nó thành một generator. Khi nó dự đoán được một từ tiếp theo, sau đó bạn đưa chính từ đó trở lại mô hình và yêu cầu mô hình dự đoán từ tiếp theo sau đó, v.v.

Tất nhiên, một phần của khó khăn là tìm ra cách dịch các từ (hoặc ghi chú) thành các vectơ mà bạn có thể truyền trực tiếp vào mô hình. Và công việc của tôi chính là tìm ra một bản mã tốt cho âm nhạc!

Tại sao bạn sử dụng kiến ​​trúc bộ nhớ dài – ngắn hạn (LSTM) cho Clara?

Như chúng ta biết rằng Jeremy Howard và Sebastien Ruder đã đạt được kết quả tuyệt vời khi sử dụng LSTM cho mô hình ngôn ngữ. Gần đây hơn nữa, có một sự thay đổi trong việc sử dụng kiến ​​trúc Transformer và ngay bây giờ tôi cũng đang thử nghiệm điều đó.

Ok, vậy chúng ta hãy nói chuyện nhiều hơn về dữ liệuquy trình mã hóa dữ liệu cho Clara. Bạn đã lấy dữ liệu âm nhạc từ đâu thế?

Tôi đã sử dụng các midi files từ Classical Archives, một tập hợp các files mà nhiều nhạc sĩ khác nhau đã đăng ký trên đó. Tôi thấy đây là một bộ sưu tập đặc biệt hữu ích, một phần vì nó quá lớn và một phần vì các tác phẩm được phân tách bởi nhà soạn nhạc. Không giống như một số bộ dữ liệu nhạc cổ điển khác, tại Classical Archives tôi có thể dễ dàng kiểm soát những bản nhạc và tôi có thể đảm bảo rằng tôi không có nhiều bản nhạc giống nhau được biểu diễn bởi nhiều nghệ sĩ piano khác nhau (Tôi không muốn có một bản nhạc trùng nhau trong cả Training set và cả Validation set).

Tương tự, tôi đã thu thập các bản nhạc jazz từ các nguồn khác nhau, bao gồm cả thư viện này. Tôi đã sử dụng Beautiful Soup để quét, tìm kiếm các trang web cho tất cả midi files.

Bạn đã quyết định mã hóa các midi files này thành một định dạng văn bản. Bạn có thể cho chúng tôi biết thêm về quá trình đó được không?

Đây là một quy trình gồm hai phần. Trước tiên tôi sử dụng MIT’s music21 library  để dịch các midi files thành luồng music21. Điều này cung cấp cho tôi các nốt và độ lệch thời gian (notes & timing offsets) của chúng (bây giờ liên quan tới tốc độ của bản nhạc).

Sau đó, tôi đã dịch các nốt và thời gian đó thành các bảng mã hợp âm chordwise hoặc notewise của tôi. Tôi sẽ giải thích những thuật ngữ này ngay dưới đây thôi.

Đầu tiên, hãy để tôi giải thích một vài thủ thuật về mã hoá thời gian của “the rest”.

Vậy “a rest” ở đây nghĩa là gì?

A rest nghĩa là silence (những khoảng lặng trong bản nhạc). Bạn có thể có những phần nghỉ như này với độ dài khác nhau để cho bạn biết phải đợi bao lâu trước khi chơi nốt tiếp theo.

Trong phiên bản hợp âm chordwise, tôi thường sử dụng thuật ngữ “rest”, ý tôi là bất cứ time step nào mà bạn không chơi nốt mới thì đó chính là “rest”. Vấn đề là, nếu các time step là thường xuyên (thường là 4 lần, hoặc thậm chí 12 lần mỗi nốt đen), thì bạn sẽ không chơi các nốt mới gần như hầu hết thời gian của bản nhạc. Khoảng 40% thời gian, bạn có chỉ số “do nothing” này, và nếu bạn đơn thuần đào tạo một mô hình như vậy, thì mạng lưới nơ-ron sẽ chỉ học để dự đoán “rest” mọi lúc, vì ít nhất là nó đúng tới 40%.

Do đó, tôi đã phát triển một mẹo mà tôi đã MÃ HOÁ LẠI “the rests”. Thay vì dự đoán 1 lần rest, tôi đã đếm tổng số nốt nhạc trong những timesteps trước đó. Điều này có hai chức năng: thứ nhất, ngăn model rơi vào việc luôn luôn dự đoán mức tối thiểu của “rest”. 

 không có cách nào để mô hình rơi vào mức tối thiểu dễ dàng cục bộ của việc luôn luôn dự đoán về phần còn lại. Thứ hai, các mô hình thường đào tạo đến độ chính xác cao hơn nếu bạn đưa cho chúng một nhiệm vụ phụ trợ nhưng có liên quan. Để làm tốt nhiệm vụ này, mô hình của bạn phải hiểu về cấu trúc của âm nhạc.

Bạn có thể giải thích các thuật ngữ chordwise notewise? Và, một hợp âm với một nốt khác nhau như nào?

Ở đây, tôi sử dụng “chord” với ý nghĩa rất chung chung, chord nghĩa là hợp âm – bất kỳ sự kết hợp nào của các nốt được chơi cùng một lúc. Thường thì đây có thể là một hợp âm âm nhạc truyền thống (ví dụ C chính sẽ là cả C, E và G được chơi cùng nhau), nhưng cũng có thể là bất kỳ sự kết hợp tùy ý nào. Về lý thuyết, có thể có 2^88 khả năng kết hợp khác nhau, nhưng trong thực tế, âm nhạc dễ đoán hơn và tôi thấy khoảng 60.000 hợp âm khác nhau trong bộ dữ liệu.

Một chordwise file trông như thế này:

Ở đây tôi chỉ ra một phạm vi nốt nhạc nhỏ (chỉ 3 hợp âm trong 1 hàng, và “p” là “piano”). “1” tức là nốt nhạc đang được chơi, nếu không được chơi thì sẽ là “0”. Tiếp theo, tôi lấy tập hợp tất cả các hợp âm có thể, và đó cũng chính là vocab của tôi.

Một notewise file trông như thế này:

  • Điểm bắt đầu của nốt nhạc (p20 có nghĩa là piano đang chơi ở quãng 20)
  • Phần cuối nốt nhạc (theo cách này bạn có thể giữ một nốt trong một thời gian dài tùy ý),
  • Tín hiệu chờ cho biết kết thúc một musical time step, cũng đồng nghĩa với khoảng thời gian bạn chờ đến time step tiếp theo.

Tại sao bạn thực hiện hai cách tiếp cận để mã hóa các midi file? Bạn có thử chordwise trước và sau đó chuyển tới notewise nhờ dựa trên kết của của model?

Tôi thực sự không hài lòng với kết quả của chordwise vì nó có xu hướng quá phù hợp với training set. Ví dụ, nếu tôi bắt đầu với một bản sonata Mozart, thì nó sẽ tiếp tục tạo ra toàn bộ phần còn lại của bản sonata đó.Việc mã hoá chordwise cũng không tổng quát lắm và nó cũng thất bại trong một vài thử nghiệm trên validation set.

Mặt khác, với phiên bản notewise nó linh hoạt hơn nhiều, và nó hoạt động tốt ngay cả khi nó đi vào bộ validation set.

Tôi nghĩ rằng chiến lược tăng dữ liệu của bạn rất thông minh – chuyển các midi files thành tất cả các nốt có thể. Bạn có thể chia sẻ cho tôi biết bạn làm tự động nó như nào vậy?

Tất nhiên rồi, thực sự rất dễ dàng với chiến lược này, tôi có thể đơn giản thêm hoặc bớt một offset cho mỗi nốt đơn. Tôi phải thừa nhận rằng tôi đã cố gắng dành một ngày để tăng cường dữ liệu cho bộ dữ liệu dataset bằng cách ngồi vào chiếc piano và ghi âm bản nhạc của chính mình trong vài giờ đồng hồ.

Tại sao bạn chỉ lấy 62 nốt nhạc thay vì lấy đủ bộ 88 nốt trên piano truyền thống để cho vào bộ mẫu?

Đây là một câu hỏi tuyệt vời. Ban đầu, tôi đã cắt bớt phạm vi các nốt vì lo lắng về kích thước vocab quá lớn. Mặc dù thực tế các nghệ sĩ âm nhạc gần như không bao giờ sử dụng nốt nhạc bên ngoài phạm vi đó (trong toàn bộ dataset, điều đó có nghĩa là cắt bỏ 3 nốt). Thực ra sẽ rất tốt khi có đủ 88 keys, nhưng những nốt ngoài 62 nốt trên thì chúng khá hiếm và trong dữ liệu cần training thì model sẽ không bao giờ học đoán chúng cả.

Hãy nói đến việc tạo ra âm nhạc của Clara, có vẻ như bạn đã bắt đầu sử dụng các lựa chọn tùy ý trong số các dự đoán tốt nhất hàng đầu thay vì dự đoán tốt nhất hàng đầu. Vậy insight này đến từ đâu?

Việc tạo ra các mẫu tốt là cực kỳ quan trọng. Ý tưởng của tôi là trong âm nhạc, có rất nhiều các lựa chọn cho các nốt nhạc hoặc hợp âm tiếp theo mà tất cả nghe rất hay. Vì vậy, thay vì chỉ đưa ra 1 dự đoán tốt nhất cho mô hình, tôi muốn đưa ra dự đoán thứ 2, dự đoán thứ 3 để lựa chọn tốt hơn.

Tôi nghĩ rằng đây sẽ là một chủ đề thú vị cho công việc trong tương lai. Ở mỗi bước tạo ra nốt nhạc, bạn giữ lại 3 nốt dự đoán tốt nhất, sau đó đưa những nốt đó vào mô hình và đoán 3 nốt tiếp theo cho mỗi nốt ngay trước nó. Bây giờ, trong 9 nốt mới tạo ra, chỉ giữ lại 3 nốt tốt nhất và lại đưa 3 nốt đó vào mô hình, cứ làm tiếp tục như vậy.

Trong âm nhạc, chúng ta có một cấu trúc rất phổ biến: chơi một đoạn nhạc ngắn, sau đó lặp lại chính xác một lần. Vào lần thứ ba, tiếp tục lặp lại nhưng với đoạn dài hơn. Tôi muốn tìm ra cách để mạng nơ-ron có thể tạo ra các nốt nhạc với cấu trúc như vậy.

Ồ, tôi quên hỏi – tại sao lại tên Clara vậy?

Chính là để vinh danh Clara Schumann. Bà là một nghệ sĩ piano và nhà soạn nhạc đáng kinh ngạc, sống ở Đức vào giữa năm 1800. Tại đây, một bản tình ca piano tuyệt đẹp do bà sáng tác đã được ra đời, và bà được coi là một trong những nghệ sĩ piano hàng đầu trong thời đại của mình. Bà cũng đã kết hôn với Robert Schumann, những người bạn rất thân với Johannes Brahms và là mẹ của 8 đứa trẻ.

Bạn thấy AI có vai trò gì trong âm nhạc? Khi nào các nhà soạn nhạc sẽ bắt đầu sử dụng các công cụ như Clara?

Hiện tại, tôi nghĩ việc sử dụng tốt nhất cho một công cụ như Clara sẽ là việc hợp tác với một nhà soạn nhạc là con người. Clara rất giỏi trong việc đưa ra các mô hình và ý tưởng mới, nhưng sau đó khi tôi lắng nghe một đoạn nhạc mà Clara tạo ra, tôi nhận thấy những điểm mà sau đó tôi muốn tách ra khỏi ý tưởng của Clara. Như đã đề cập, tôi không phải là một nhà soạn nhạc, nhưng Clara đang khiến tôi muốn thử lại việc đó, vì vậy tôi có thể tưởng tượng rằng một nhà soạn nhạc tốt có thể thực hiện điều này theo những hướng đi rất thú vị.

Thực tế, tôi tưởng tượng AI có thể tạo ra những bản nhạc và dùng trong phim ảnh. Thêm vào đó, chúng ta dễ dàng chấp nhận cho những thước phim “film score” mà không có quy mô lớn, chỉ là muốn âm nhạc thêm vào để tăng xúc cảm người xem, nhưng không thu hút sự chú ý tới chính nó.

Hy vọng bài viết này khiến bạn thấy rằng ứng dụng của neural networks là rất lớn và xu hướng chung trong tương lai sẽ áp dụng AI/Deep Learning vào đời sống hàng ngày của chúng ta. Hiện nay, iRender mang tới cho khách hàng dịch vụ GPU Cloud for AI/DL – cung cấp hiệu suất máy tính với hàng ngàn CPUs và GPUs mạnh mẽ, đồng thời hỗ trợ Deep Learning Framework phổ biến như TensorFlow, Keras, MXNET, PyTorch,…. Chúng tôi cung cấp 1-6 cards x GTX 1080 Ti và 1-6 cards x RTX 2080 Ti, giúp tốc độ Training set, Cross validation set và Test set diễn ra nhanh hơn cũng như xử lý trơn tru hơn. 

Hãy đăng ký tại đây để sử dụng dịch vụ của chúng tôi.

Xem thêm: 6 ứng dụng Deep Learning thú vị cho NLP

Nguồn: AI Global
, , , , , , , , , , , , ,
Contact

iRENDER FARM

GPU Cloud Service
Remote Render Farm
GPU Cloud for AI/DeepLearning
iRender International

INTEGRATIONS

Autodesk Maya
Autodesk 3DS Max
Blender
Cinema 4D
Houdini
Maxwell
Nvidia Iray
Lumion
KeyShot
UE4
Twinmotion
Redshift
Octane
Modo
LightWave 3D
LuxCore
And many more…

iRENDER TEAM

MONDAY – SUNDAY
Hotline: 0916 806 116
Zalo: 0916 806 116
Skype: iRender Support
Email: [email protected]
CÔNG TY CỔ PHẦN CÔNG
NGHỆ IRENDER VIỆT NAM
MST:0108787752
VPGD: Số 5, ngõ 82 Dịch Vọng Hậu, Cầu Giấy, Hà Nội.

Contact
0916806116 [email protected]