Đầu trong học tập sâu là gì?

Deep Learning đã phát triển từ các mạng thần kinh đơn giản thành các kiến ​​trúc khá phức tạp trong một khoảng thời gian ngắn. Để hỗ trợ quá trình mở rộng nhanh chóng này, nhiều nền tảng và thư viện học sâu khác nhau được phát triển trong quá trình thực hiện. Một trong những mục tiêu chính của các thư viện này là cung cấp các giao diện dễ sử dụng để xây dựng và đào tạo các mô hình học sâu, cho phép người dùng tập trung hơn vào các tác vụ hiện tại. Để đạt được điều này, nó có thể yêu cầu ẩn các đơn vị triển khai cốt lõi đằng sau một số lớp trừu tượng gây khó khăn cho việc hiểu các nguyên tắc cơ bản cơ bản mà các thư viện học sâu dựa vào. Do đó, mục tiêu của bài viết này là cung cấp thông tin chuyên sâu về các khối xây dựng của thư viện học sâu. Trước tiên, chúng tôi xem qua một số thông tin cơ bản về Deep Learning để hiểu các yêu cầu chức năng, sau đó xem qua một thư viện đơn giản nhưng đầy đủ trong python bằng NumPy có khả năng đào tạo từ đầu đến cuối các mô hình mạng thần kinh (thuộc các loại rất đơn giản). Đồng thời, chúng ta sẽ tìm hiểu các thành phần khác nhau của khung học tập sâu. Thư viện chỉ dưới 100 dòng mã và do đó khá dễ theo dõi. Bạn có thể tìm thấy mã nguồn hoàn chỉnh tại https. //github. com/parmeet/dll_numpy

 

Lý lịch

 
Thông thường, một thư viện tính toán học sâu (như TensorFlow và PyTorch) bao gồm các thành phần được hiển thị trong hình bên dưới.

Đầu trong học tập sâu là gì?

Các thành phần của Deep Learning Framework

 
Toán tử

Cũng được sử dụng thay thế cho nhau với các lớp, chúng là các khối xây dựng cơ bản của bất kỳ mạng thần kinh nào. Toán tử là các hàm có giá trị vectơ biến đổi dữ liệu. Một số toán tử thường được sử dụng là các lớp như tuyến tính, tích chập và tổng hợp và các hàm kích hoạt như ReLU và Sigmoid

 
Trình tối ưu hóa

Chúng là xương sống của bất kỳ thư viện deep learning nào. Chúng cung cấp công thức cần thiết để cập nhật các tham số mô hình bằng cách sử dụng độ dốc của chúng đối với mục tiêu tối ưu hóa. Một số trình tối ưu hóa nổi tiếng là SGD, RMSProp và Adam

 
Hàm mất mát

Chúng là các biểu thức toán học dạng đóng và khả vi được sử dụng làm chất thay thế cho mục tiêu tối ưu hóa của vấn đề hiện tại. Ví dụ: tổn thất entropy chéo và tổn thất Bản lề là các hàm tổn thất thường được sử dụng cho các tác vụ phân loại

 
Trình khởi tạo

Chúng cung cấp các giá trị ban đầu cho các tham số mô hình khi bắt đầu đào tạo. Khởi tạo đóng một vai trò quan trọng trong việc đào tạo các mạng lưới thần kinh sâu, vì việc khởi tạo tham số không tốt có thể dẫn đến sự hội tụ chậm hoặc không. Có nhiều cách người ta có thể khởi tạo các trọng số mạng như các trọng số ngẫu nhiên nhỏ được rút ra từ phân phối chuẩn. Bạn có thể xem https. // máy ảnh. io/initializers/ để có danh sách đầy đủ

 
Bộ điều chỉnh

Chúng cung cấp cơ chế kiểm soát cần thiết để tránh trang bị quá mức và thúc đẩy quá trình khái quát hóa. Người ta có thể điều chỉnh quá mức thông qua các biện pháp rõ ràng hoặc ngầm định. Các phương pháp rõ ràng áp đặt các ràng buộc cấu trúc đối với các trọng số, ví dụ: giảm thiểu L1-Norm và L2-Norm của chúng để làm cho các trọng số thưa thớt hơn và đồng nhất tương ứng. Các biện pháp ngầm định là các toán tử chuyên biệt thực hiện chuyển đổi các biểu diễn trung gian, thông qua chuẩn hóa rõ ràng, ví dụ: BatchNorm hoặc bằng cách thay đổi kết nối mạng, chẳng hạn như DropOut và DropConnect

Các thành phần nêu trên về cơ bản thuộc về phần front-end của thư viện. Theo mặt trước, ý tôi là các thành phần được tiếp xúc với người dùng để họ thiết kế hiệu quả các kiến ​​trúc mạng thần kinh. Về phía back-end, các thư viện này hỗ trợ tính toán tự động độ dốc của hàm mất mát đối với các tham số khác nhau trong mô hình. Kỹ thuật này thường được gọi là Phân biệt tự động (AD)

 
Tự động phân biệt (AD)

Mỗi thư viện học sâu cung cấp một hương vị của AD để người dùng có thể tập trung vào việc xác định cấu trúc mô hình (đồ thị tính toán) và giao nhiệm vụ tính toán độ dốc cho mô-đun AD. Hãy để chúng tôi đi qua một ví dụ để xem nó hoạt động như thế nào. Giả sử chúng ta muốn tính đạo hàm riêng của hàm sau đối với các biến đầu vào X₁ và X₂

Y = sin(x₁)+X₁*X₂


Hình dưới đây, mà tôi đã mượn từ https. // vi. wikipedia. org/wiki/Automatic_differentiation, hiển thị biểu đồ tính toán và phép tính đạo hàm thông qua quy tắc chuỗi

Đầu trong học tập sâu là gì?

Biểu đồ tính toán và tính toán đạo hàm thông qua quy tắc chuỗi

 

Những gì bạn thấy trong hình trên là một đặc điểm của phân biệt tự động chế độ đảo ngược (AD). Thuật toán Back-propagation nổi tiếng là một trường hợp đặc biệt của thuật toán trên trong đó hàm ở trên cùng là hàm mất mát. AD khai thác thực tế là mọi hàm tổng hợp bao gồm các phép toán số học cơ bản và các hàm cơ bản, và do đó có thể tính đạo hàm bằng cách áp dụng đệ quy quy tắc chuỗi cho các phép toán này

 

Thực hiện

 
Trong phần trước, chúng ta đã xem qua tất cả các thành phần cần thiết để tạo ra thư viện học sâu đầu tiên có thể thực hiện đào tạo từ đầu đến cuối. Để đơn giản hóa mọi thứ, tôi sẽ bắt chước mẫu thiết kế của Cà phê Library. Ở đây chúng ta định nghĩa hai lớp trừu tượng. Lớp “Chức năng” và lớp “Trình tối ưu hóa”. Ngoài ra, còn có một lớp “Tensor” là một cấu trúc đơn giản chứa hai mảng đa chiều NumPy, một để giữ giá trị của các tham số và một để giữ độ dốc của chúng. Tất cả các tham số trong các lớp/toán tử khác nhau sẽ thuộc loại “Tensor”. Trước khi chúng tôi tìm hiểu sâu hơn, hình dưới đây cung cấp tổng quan cấp cao về thư viện.

Đầu trong học tập sâu là gì?

Sơ đồ UML của Thư viện

 

Tại thời điểm viết bài này, thư viện đi kèm với việc triển khai lớp tuyến tính, kích hoạt ReLU và Lớp SoftMaxLoss cùng với trình tối ưu hóa SGD. Do đó, thư viện có thể được sử dụng để đào tạo một mô hình phân loại bao gồm các lớp được kết nối đầy đủ và phi tuyến tính ReLU. Bây giờ chúng ta hãy đi qua một số chi tiết của hai lớp trừu tượng chúng ta có

Lớp trừu tượng “Hàm” cung cấp một giao diện cho các toán tử và được định nghĩa như sau


Lớp hàm trừu tượng
 

Tất cả các toán tử được triển khai bằng cách kế thừa lớp trừu tượng “Hàm”. Mỗi toán tử phải cung cấp cách triển khai các phương thức forward(…) và backward(…), đồng thời tùy chọn triển khai hàm getParams để cung cấp quyền truy cập vào các tham số của nó (nếu có). Phương thức forward(…) nhận đầu vào và trả về phép biến đổi của nó bởi toán tử. Nó cũng sẽ thực hiện mọi thao tác cần thiết để tính toán độ dốc. Phương thức backward(…) nhận đạo hàm riêng của hàm mất mát đối với đầu ra của toán tử và triển khai đạo hàm riêng của hàm mất mát đối với đầu vào và tham số của toán tử (nếu có). Lưu ý rằng hàm backward(…) về cơ bản cung cấp khả năng cho thư viện của chúng tôi thực hiện phân biệt tự động.
Để làm cho mọi thứ trở nên cụ thể, hãy xem cách triển khai hàm Tuyến tính như trong đoạn mã sau.


Triển khai hàm tuyến tính
 

Hàm forward(…) thực hiện chuyển đổi biểu mẫu Y = X*W+b và trả về nó. Nó cũng lưu trữ đầu vào X vì điều này là cần thiết để tính toán độ dốc của W trong hàm lùi. Hàm backward(…) nhận đạo hàm riêng dY của tổn thất đối với đầu ra Y và triển khai đạo hàm riêng đối với đầu vào X và tham số W và b. Hơn nữa, nó trả về đạo hàm riêng đối với đầu vào X, sẽ được chuyển sang lớp trước đó

Lớp “Trình tối ưu hóa” trừu tượng cung cấp giao diện cho trình tối ưu hóa và được định nghĩa như sau


Lớp Trình tối ưu hóa trừu tượng
 

Tất cả các trình tối ưu hóa được triển khai bằng cách kế thừa lớp cơ sở “Trình tối ưu hóa”. Lớp tối ưu hóa cụ thể phải cung cấp cách triển khai cho hàm step(). Phương pháp này cập nhật các tham số mô hình bằng cách sử dụng đạo hàm riêng của chúng đối với tổn thất mà chúng tôi đang tối ưu hóa. Tham chiếu đến các tham số mô hình khác nhau được cung cấp trong hàm __init__(…). Lưu ý rằng chức năng chung của việc đặt lại độ dốc được triển khai trong chính lớp cơ sở

Để làm cho mọi thứ trở nên cụ thể, chúng ta hãy xem xét việc thực hiện giảm dần độ dốc ngẫu nhiên (SGD) với động lượng và phân rã trọng lượng

 

Đến với những thứ thực sự

 
Cuối cùng, chúng tôi có tất cả các thành phần để huấn luyện mô hình mạng thần kinh (sâu) bằng thư viện của chúng tôi. Để làm như vậy, chúng ta sẽ cần những điều sau đây.

  • Kiểu mẫu. Đây là biểu đồ tính toán của chúng tôi
  • Dữ liệu và Mục tiêu. Đây là dữ liệu đào tạo của chúng tôi
  • Mất chức năng. Thay thế cho mục tiêu tối ưu hóa của chúng tôi
  • trình tối ưu hóa. Để cập nhật các tham số mô hình

Mã giả sau đây mô tả một chu trình đào tạo điển hình

model #computation graph
data,target #training data
loss_fn #optimization objective
optim #optimizer to update model parameters to minimize lossRepeat:#until convergence or for predefined number of epochs
   optim.zeroGrad() #set all gradients  to zero
   output = model.forward(data) #get output from  model
   loss   = loss_fn(output,target) #calculate loss
   grad   = loss.backward() #calculate gradient of loss w.r.t output
   model.backward(grad) #calculate gradients for all the parameters
   optim.step() #update model parameters


Mặc dù không phải là thành phần cần thiết cho một thư viện học sâu, nhưng có thể nên gói gọn các chức năng trên trong một lớp để chúng ta không phải lặp lại mỗi khi cần đào tạo một mô hình mới (điều này phù hợp với . Để đạt được điều này, hãy định nghĩa một lớp “Mô hình” như trong đoạn mã sau

Lớp này phục vụ các chức năng sau

  • đồ thị tính toán. Thông qua hàm add(…), người ta có thể xác định một mô hình tuần tự. Trong nội bộ, lớp sẽ chỉ lưu trữ tất cả các toán tử trong một danh sách có tên là computation_graph
  • Khởi tạo tham số. Lớp sẽ tự động khởi tạo các tham số mô hình với các giá trị ngẫu nhiên nhỏ được rút ra từ phân phối đồng đều khi bắt đầu đào tạo
  • đào tạo người mẫu. Thông qua hàm fit(…), lớp cung cấp một giao diện chung để huấn luyện các mô hình. Hàm này yêu cầu dữ liệu đào tạo, trình tối ưu hóa và hàm mất mát
  • Suy luận mô hình. Thông qua chức năng predict(…), lớp cung cấp một giao diện chung để đưa ra dự đoán bằng mô hình được đào tạo

Vì lớp này không đóng vai trò là khối xây dựng cơ bản để học sâu, nên tôi đã triển khai nó trong một mô-đun riêng gọi là tiện ích. py. Lưu ý rằng hàm fit(…) sử dụng Lớp DataGenerator mà việc triển khai cũng được cung cấp trong các tiện ích. mô-đun py. Lớp này chỉ là một trình bao bọc xung quanh dữ liệu đào tạo của chúng tôi và tạo các lô nhỏ cho mỗi lần lặp đào tạo

 

Đào tạo mô hình đầu tiên của chúng tôi

 
Bây giờ chúng ta hãy xem qua đoạn mã cuối cùng huấn luyện mô hình mạng thần kinh bằng thư viện được đề xuất. Lấy cảm hứng từ bài đăng trên blog của Andrej Karapathy, tôi sẽ đào tạo một mô hình mạng thần kinh lớp ẩn trên dữ liệu xoắn ốc. Mã để tạo dữ liệu và trực quan hóa dữ liệu có sẵn trong các tiện ích. tập tin py.

Đầu trong học tập sâu là gì?

Dữ liệu xoắn ốc với ba lớp

 

Dữ liệu xoắn ốc ba lớp được hiển thị trong hình trên. Dữ liệu có thể phân tách phi tuyến tính. Vì vậy, chúng tôi hy vọng rằng mạng nơ-ron một lớp ẩn của chúng tôi có thể tìm hiểu ranh giới quyết định phi tuyến tính. Kết hợp tất cả lại với nhau, đoạn mã sau sẽ huấn luyện mô hình của chúng ta


Mã đầu cuối để huấn luyện mô hình mạng thần kinh
 

Hình dưới đây cho thấy cùng một dữ liệu xoắn ốc cùng với các ranh giới quyết định của mô hình được đào tạo

Đầu trong học tập sâu là gì?

Dữ liệu xoắn ốc với ranh giới quyết định tương ứng của mô hình được đào tạo

 

Kết luận

 
Với sự phức tạp ngày càng tăng của các mô hình học sâu, các thư viện có xu hướng phát triển theo cấp số nhân cả về chức năng và triển khai cơ bản của chúng. Điều đó nói rằng, các chức năng cốt lõi vẫn có thể được triển khai trong một số dòng mã tương đối nhỏ. Mặc dù thư viện có thể được sử dụng để đào tạo các mô hình mạng nơ-ron đầu cuối (thuộc các loại rất đơn giản), nhưng nó vẫn bị hạn chế theo nhiều cách để làm cho các khung học sâu có thể sử dụng được trong các lĩnh vực khác nhau bao gồm (nhưng không giới hạn) tầm nhìn, lời nói, . Như đã nói, tôi nghĩ đây cũng là cơ hội để rẽ nhánh triển khai cơ sở và bổ sung các chức năng còn thiếu để bạn có được trải nghiệm thực tế. Một số điều bạn có thể cố gắng thực hiện là.

  • nhà điều hành. Convolution Pooling, v.v.
  • Trình tối ưu hóa. Adam RMSProp, v.v.
  • Bộ điều chỉnh. BatchNorm DropOut, v.v.

Tôi hy vọng bài viết này cung cấp cho bạn một cái nhìn thoáng qua về những gì diễn ra bí mật khi bạn sử dụng bất kỳ thư viện học sâu nào để huấn luyện các mô hình của mình. Cảm ơn bạn đã quan tâm và tôi mong nhận được ý kiến ​​đóng góp của bạn hoặc bất kỳ câu hỏi nào trong phần bình luận

Đầu trong AI là gì?

Scratch with AI Extension là công cụ lập trình dựa trên khối được sử dụng để tạo Câu chuyện, Trò chơi và Ảnh động . Trong khóa học này, sinh viên sẽ tạo ra các chương trình thú vị để làm chủ công cụ. 1. Giới thiệu về Scratch với phần mở rộng AI.

Học từ đầu là gì?

Học tập. Scratch là môi trường học tập an toàn và vui tươi, thu hút tất cả trẻ em suy nghĩ sáng tạo, lập luận có hệ thống và làm việc hợp tác —những kỹ năng cần thiết cho mọi người trong xã hội ngày nay.

Làm thế nào để học deep learning từ đầu?

Tìm hiểu các điều kiện tiên quyết. .
Tìm hiểu lý thuyết ML từ A đến Z. .
Đi sâu vào các chủ đề thiết yếu. .
Làm việc trên các dự án. .
Tìm hiểu và làm việc với các công cụ ML khác nhau. .
Nghiên cứu các thuật toán ML từ đầu. .
Chọn tham gia khóa học máy học. .
Nộp đơn xin thực tập

Học máy là gì?

Máy học là một nhánh của trí tuệ nhân tạo (AI) và khoa học máy tính tập trung vào việc sử dụng dữ liệu và thuật toán để bắt chước cách học của con người, dần dần cải thiện độ chính xác của nó< . .