Học sâu từ đầu pdf

Tải xuống Machine Learning miễn phí ở dạng PDF. Ghi chú này cung cấp các nghiên cứu điển hình xuất sắc về các kỹ thuật khác nhau trong học máy. Trong ghi chú này, mỗi chương tập trung vào một vấn đề cụ thể trong học máy, chẳng hạn như phân loại, dự đoán, tối ưu hóa và đề xuất

Sử dụng ngôn ngữ lập trình R, bạn sẽ học cách phân tích các bộ dữ liệu mẫu và viết các thuật toán học máy đơn giản. Ghi chú này lý tưởng cho các lập trình viên, từ mọi nền tảng bao gồm kinh doanh, chính phủ và nghiên cứu học thuật.  

Ghi chúMáy học từ đầu TypePDFKích thước24 MBNgôn ngữ Tiếng Anh Dành cho Beginners To Advance 

Bạn học những chủ đề này từ ghi chú này

Bạn học những chủ đề này trong ghi chú này

1. Sử dụng R

  • R cho máy học
  • Tải xuống và cài đặt R
  • IDE và Trình soạn thảo văn bản
  • Đang tải và cài đặt các gói R

2. Khám phá dữ liệu

  • Thăm dò so với cấu hình
  • suy ra ý nghĩa
  • Tóm tắt số
  • Trực quan hóa dữ liệu khám phá

3. phân loại. Lọc thư rác

  • Đây hay kia. Phân loại nhị phân
  • Di chuyển nhẹ nhàng vào xác suất có điều kiện
  • Viết bộ phân loại thư rác Bayesian đầu tiên của chúng tôi

4. xếp hạng. Hộp thư ưu tiên

  • Sắp xếp thư điện tử theo mức độ ưu tiên
  • Các chức năng để trích xuất bộ tính năng
  • Tạo sơ đồ trọng số để xếp hạng
  • Đào tạo và kiểm tra người xếp hạng

5. hồi quy. Dự đoán lượt xem trang

  • Giới thiệu hồi quy
  • Dự đoán lưu lượng truy cập web
  • Xác định tương quan

6. Chính quy. hồi quy văn bản

  • Mối quan hệ phi tuyến tính giữa các cột. Ngoài Đường Thẳng
  • Các phương pháp ngăn chặn lắp quá mức
  • hồi quy văn bản

7. Tối ưu hóa. phá mã

  • Giới thiệu về Tối ưu hóa
  • Hồi quy sườn
  • Đột phá mã khi tối ưu hóa

8. PCA. Xây dựng chỉ số thị trường

  • Học không giám sát

9. MDS. Khám phá trực quan sự tương đồng của Thượng nghị sĩ Hoa Kỳ

  • Phân cụm dựa trên sự tương đồng
  • Làm thế nào để cụm Thượng nghị sĩ Hoa Kỳ?

10. KNN. Hệ thống khuyến nghị

  • Thuật toán K-Láng giềng gần nhất
  • Dữ liệu cài đặt gói R

11. Phân tích các nhóm xã hội

  • Phân tích mạng xã hội
  • suy nghĩ đồ họa
  • Phân tích mạng Twister
  • Cấu trúc cộng đồng địa phương

12. So sánh mô hình

  • SVM. Máy Vector hỗ trợ
  • So sánh các thuật toán

Học sâu từ đầu pdf

   

tải PDF

 

3 Deep Learning from Scratch của Seth Weidman Bản quyền 2019 Seth Weidman. Đã đăng ký Bản quyền. In tại Hoa Kỳ. Xuất bản bởi O Reilly Media, Inc. , 1005 Gravenstein Highway North, Sebastopol, CA O Sách Reilly có thể được mua cho mục đích giáo dục, kinh doanh hoặc quảng cáo bán hàng. Phiên bản trực tuyến cũng có sẵn cho hầu hết các đầu sách ( Để biết thêm thông tin, hãy liên hệ với bộ phận bán hàng của công ty/tổ chức của chúng tôi. hoặc Biên tập viên phát triển. Biên tập viên mua lại Melissa Potter. Jon Hassell và Mike Loukides Biên tập sản xuất. Katherine Tozer Biên Tập Viên. Người soát lỗi Arthur Johnson. Người lập chỉ mục Rachel Monaghan. Nhà thiết kế nội thất Judith McConville. Nhà thiết kế bìa David Futato. Minh họa Karen Montgomery. Rebecca Demarest Tháng Chín 2019. Phiên bản đầu tiên Lịch sử sửa đổi cho Phiên bản đầu tiên. Bản phát hành đầu tiên Xem bản phát hành

4 chi tiết. Logo O Reilly là nhãn hiệu đã đăng ký của O Reilly Media, Inc. Deep Learning from Scratch, ảnh bìa và trang phục thương mại có liên quan là thương hiệu của O Reilly Media, Inc. Quan điểm thể hiện trong tác phẩm này là của tác giả và không đại diện cho quan điểm của nhà xuất bản. Mặc dù nhà xuất bản và tác giả đã nỗ lực hết sức để đảm bảo rằng thông tin và hướng dẫn trong tác phẩm này là chính xác, nhà xuất bản và tác giả từ chối mọi trách nhiệm đối với các lỗi hoặc thiếu sót, bao gồm nhưng không giới hạn trách nhiệm đối với các thiệt hại do việc sử dụng hoặc . Bạn tự chịu rủi ro khi sử dụng thông tin và hướng dẫn có trong tác phẩm này. Nếu bất kỳ mẫu mã hoặc công nghệ nào khác mà tác phẩm này chứa hoặc mô tả tuân theo giấy phép nguồn mở hoặc quyền sở hữu trí tuệ của người khác, bạn có trách nhiệm đảm bảo rằng việc sử dụng của bạn tuân thủ các giấy phép và/hoặc quyền đó [LSI]

5 Lời nói đầu Nếu bạn đã cố gắng tìm hiểu về mạng nơ-ron và học sâu, có lẽ bạn đã gặp vô số tài nguyên, từ các bài đăng trên blog đến MOOC (các khóa học trực tuyến mở quy mô lớn, chẳng hạn như các khóa học được cung cấp trên Coursera và Udacity) với chất lượng khác nhau và thậm chí một số . Tuy nhiên, nếu bạn đang đọc lời nói đầu này, có vẻ như mọi lời giải thích về mạng lưới thần kinh mà bạn đã xem qua đều thiếu sót theo một cách nào đó. Tôi đã tìm thấy điều tương tự khi tôi bắt đầu học. những lời giải thích khác nhau giống như những người mù mô tả các bộ phận khác nhau của một con voi, nhưng không có gì mô tả toàn bộ. Đó là lý do khiến tôi viết cuốn sách này. Các tài nguyên hiện có trên mạng lưới thần kinh chủ yếu thuộc hai loại. Một số mang tính khái niệm và toán học, bao gồm cả hình vẽ mà người ta thường thấy trong phần giải thích về mạng lưới thần kinh, về các vòng tròn được nối với nhau bằng các đường có mũi tên ở hai đầu, cũng như các giải thích toán học mở rộng về những gì đang diễn ra để bạn có thể hiểu lý thuyết. Một ví dụ điển hình về điều này là cuốn sách rất hay Deep Learning của Ian Goodfellow et al. (Báo chí MIT). Các tài nguyên khác có các khối mã dày đặc, nếu được chạy, có vẻ như sẽ hiển thị giá trị mất mát giảm dần theo thời gian và do đó, mạng thần kinh học tập. Chẳng hạn, ví dụ sau từ tài liệu PyTorch thực sự xác định và huấn luyện một mạng thần kinh đơn giản trên dữ liệu được tạo ngẫu nhiên. # N là kích thước lô; . N, D_in, H, D_out = 64, 1000, 100, 10 # Tạo dữ liệu đầu vào và đầu ra ngẫu nhiên x = torch. randn(n, D_in, device=device, dtype=dtype) y = torch. randn(n, D_out, device=device, dtype=dtype) # Khởi tạo ngẫu nhiên các trọng số w1 = torch. randn(d_in, H, device=device, dtype=dtype) w2 = torch. randn(h, D_out, device=device, dtype=dtype) learning_rate = 1e-6 for t in range(500). # Chuyển tiếp qua. tính toán dự đoán y

6 giờ = x. mm(w1) h_relu = h. kẹp (tối thiểu = 0) y_pred = h_relu. mm(w2) # Tính toán và in loss loss = (y_pred - y). bột(2). Tổng(). item() print(t, loss) # Backprop để tính toán độ dốc của w1 và w2 đối với độ mất mát grad_y_pred = 2. 0 * (y_pred - y) grad_w2 = h_relu. t(). mm(grad_y_pred) grad_h_relu = grad_y_pred. mm(w2. t()) grad_h = grad_h_relu. bản sao() grad_h[h < 0] = 0 grad_w1 = x. t(). mm(grad_h) # Update weights using gradient descent w1 -= learning_rate * grad_w1 w2 -= learning_rate * grad_w2 Explanations like this, of course, don t give much insight into what is really going on . the underlying mathematical principles, the individual neural network components contained here and how they work together, and so on. 1 What would a good explanation of neural networks contain? For an answer, it is instructive to look at how other computer science concepts are explained. if you want to learn about sorting algorithms, for example, there are textbooks that will contain. An explanation of the algorithm, in plain English A visual explanation of how the algorithm works, of the kind that you would draw on a whiteboard during a coding interview Some mathematical explanation of why the algorithm works Pseudocode implementing the algorithm One rarely or never finds these elements of an explanation of neural networks side by side, even though it seems obvious to me that a proper explanation of neural networks should be done this way; this book is an attempt to fill that gap. 2

7 Hiểu Mạng nơ-ron Yêu cầu Nhiều Mô hình Tinh thần Tôi không phải là nhà nghiên cứu và tôi không có bằng Tiến sĩ. D. Tuy nhiên, tôi đã dạy khoa học dữ liệu một cách chuyên nghiệp. Tôi đã dạy một vài chương trình đào tạo về khoa học dữ liệu với một công ty tên là Metis, sau đó tôi đi vòng quanh thế giới trong một năm cùng với Metis để thực hiện các hội thảo kéo dài một đến năm ngày cho các công ty thuộc nhiều ngành khác nhau, trong đó tôi giải thích về máy học và kỹ thuật phần mềm cơ bản . Tôi luôn yêu thích công việc giảng dạy và luôn bị cuốn hút bởi câu hỏi làm thế nào để giải thích tốt nhất các khái niệm kỹ thuật, gần đây nhất tôi tập trung vào các khái niệm về học máy và thống kê. Với mạng nơ-ron, tôi nhận thấy phần khó khăn nhất là truyền đạt mô hình tư duy chính xác về mạng nơ-ron là gì, đặc biệt là vì để hiểu đầy đủ về mạng nơ-ron không chỉ cần một mà một số mô hình tư duy, tất cả đều làm sáng tỏ các khía cạnh khác nhau (nhưng vẫn cần thiết) . Để minh họa điều này. Bốn câu sau đây đều là câu trả lời đúng cho câu hỏi Mạng nơ-ron là gì?. Mạng thần kinh là một hàm toán học nhận đầu vào và tạo đầu ra. Mạng thần kinh là một biểu đồ tính toán mà qua đó các mảng đa chiều chảy. Một mạng nơ-ron được tạo thành từ các lớp, mỗi lớp có thể được coi là có một số nơ-ron. Mạng thần kinh là một công cụ xấp xỉ hàm phổ quát, về lý thuyết có thể đại diện cho giải pháp cho bất kỳ vấn đề học tập có giám sát nào. Thật vậy, nhiều người trong số các bạn đang đọc bài viết này có lẽ đã từng nghe một hoặc nhiều điều này trước đây và có thể hiểu một cách hợp lý về ý nghĩa của chúng cũng như ý nghĩa của chúng đối với cách thức hoạt động của mạng lưới thần kinh. Tuy nhiên, để hiểu đầy đủ về chúng, chúng ta sẽ phải hiểu tất cả chúng và chỉ ra cách chúng được kết nối với nhau. Thực tế là một mạng nơ-ron có thể được biểu diễn như một biểu đồ tính toán được kết nối với khái niệm các lớp chẳng hạn như thế nào?

8 máy tính xách tay của bạn. Tuy nhiên, mặc dù thực tế là chúng ta sẽ dành một lượng thời gian đáng kể cho các chi tiết triển khai, nhưng mục đích của việc triển khai các mô hình này trong Python là để củng cố và làm cho hiểu biết của chúng ta về các khái niệm trở nên chính xác; . Mục tiêu của tôi là sau khi đọc cuốn sách này, bạn sẽ có hiểu biết vững chắc về tất cả các mô hình tư duy này (và ý nghĩa của chúng đối với cách thức triển khai mạng lưới thần kinh) để việc học các khái niệm liên quan hoặc thực hiện các dự án tiếp theo trong lĩnh vực này sẽ hiệu quả hơn rất nhiều.

9 Đề cương chương Ba chương đầu tiên là những chương quan trọng nhất và bản thân chúng có thể tạo thành một cuốn sách độc lập. 1. Trong Chương 1, tôi sẽ chỉ ra cách biểu diễn các hàm toán học dưới dạng một chuỗi các phép toán được liên kết với nhau để tạo thành một đồ thị tính toán và chỉ ra cách biểu diễn này cho phép chúng ta tính đạo hàm của các đầu ra của hàm này đối với đầu vào của chúng bằng cách sử dụng quy tắc dây chuyền từ phép tính. Ở cuối chương này, tôi sẽ giới thiệu một phép toán rất quan trọng, phép nhân ma trận và chỉ ra cách nó có thể phù hợp với một hàm toán học được biểu diễn theo cách này trong khi vẫn cho phép chúng ta tính các đạo hàm mà chúng ta sẽ cần cho deep learning. 2. Trong Chương 2, chúng ta sẽ trực tiếp sử dụng các khối xây dựng mà chúng ta đã tạo trong Chương 1 để xây dựng và đào tạo các mô hình nhằm giải quyết vấn đề trong thế giới thực. cụ thể, chúng tôi sẽ sử dụng chúng để xây dựng cả mô hình hồi quy tuyến tính và mạng thần kinh để dự đoán giá nhà đất trên tập dữ liệu trong thế giới thực. Tôi sẽ chỉ ra rằng mạng nơ-ron hoạt động tốt hơn hồi quy tuyến tính và cố gắng đưa ra một số trực giác về lý do tại sao. Cách tiếp cận nguyên tắc đầu tiên để xây dựng các mô hình trong chương này sẽ cung cấp cho bạn một ý tưởng rất hay về cách thức hoạt động của mạng nơ-ron, nhưng cũng sẽ cho thấy khả năng hạn chế của cách tiếp cận từng bước, hoàn toàn dựa trên nguyên tắc đầu tiên để xác định học sâu. . Lớp, Mô hình, Trình tối ưu hóa, v.v. Chúng ta sẽ kết thúc chương này bằng cách đào tạo một mô hình học sâu, được xác định từ đầu, trên cùng một bộ dữ liệu từ Chương 2 và cho thấy rằng nó hoạt động tốt hơn mạng thần kinh đơn giản của chúng ta. 4. Hóa ra, có rất ít sự đảm bảo về mặt lý thuyết rằng một mạng thần kinh với một kiến ​​trúc nhất định sẽ thực sự tìm ra giải pháp tốt trên một tập dữ liệu nhất định khi được đào tạo bằng các kỹ thuật đào tạo tiêu chuẩn mà chúng ta sẽ áp dụng.

10 sử dụng trong cuốn sách này. Trong Chương 4, chúng ta sẽ đề cập đến các thủ thuật đào tạo quan trọng nhất thường làm tăng khả năng mạng nơ-ron sẽ tìm ra giải pháp tốt và, bất cứ khi nào có thể, đưa ra một số trực giác toán học về lý do tại sao chúng hoạt động. 5. Trong Chương 5, tôi trình bày các ý tưởng cơ bản đằng sau mạng nơ-ron tích chập (CNN), một loại kiến ​​trúc mạng nơ-ron chuyên dùng để hiểu hình ảnh. Có rất nhiều cách giải thích về CNN ngoài kia, vì vậy tôi sẽ tập trung vào việc giải thích những điểm cốt yếu tuyệt đối của CNN và cách chúng khác với các mạng thần kinh thông thường. cụ thể là cách CNN dẫn đến việc mỗi lớp tế bào thần kinh được tổ chức thành các bản đồ đặc trưng và cách hai trong số các lớp này (mỗi lớp được tạo thành từ nhiều bản đồ đặc trưng) được kết nối với nhau thông qua các bộ lọc tích chập. Ngoài ra, giống như chúng ta đã mã hóa các lớp thông thường trong mạng thần kinh từ đầu, chúng ta sẽ mã hóa các lớp tích chập từ đầu để củng cố hiểu biết của chúng ta về cách chúng hoạt động. 6. Xuyên suốt năm chương đầu tiên, chúng ta sẽ xây dựng một thư viện mạng nơ-ron thu nhỏ định nghĩa mạng nơ-ron là một loạt các Lớp, bản thân chúng được tạo thành từ một loạt các Hoạt động gửi đầu vào về phía trước và chuyển đổi độ dốc về phía sau. This is not how most neural networks are implemented in practice; instead, they use a technique called automatic differentiation. Tôi sẽ đưa ra một minh họa nhanh về sự khác biệt tự động ở đầu Chương 6 và sử dụng nó để thúc đẩy chủ đề chính của chương. mạng thần kinh tái phát (RNN), kiến ​​trúc mạng thần kinh thường được sử dụng để hiểu dữ liệu trong đó các điểm dữ liệu xuất hiện tuần tự, chẳng hạn như dữ liệu chuỗi thời gian hoặc dữ liệu ngôn ngữ tự nhiên. Tôi sẽ giải thích hoạt động của vanilla RNNs và hai biến thể. GRU và LSTM (và tất nhiên là triển khai cả ba từ đầu); . 7. Cuối cùng, trong Chương 7, tôi sẽ chỉ ra cách mọi thứ chúng ta đã làm từ đầu trong Chương 1 6 có thể được triển khai bằng cách sử dụng thư viện mạng thần kinh mã nguồn mở, hiệu suất cao PyTorch. Học một khuôn khổ như thế này là điều cần thiết để bạn tiến bộ trong việc học về mạng lưới thần kinh;

11 Đi sâu vào và học một khuôn khổ mà không có hiểu biết vững chắc trước về cách thức và lý do mạng thần kinh hoạt động sẽ hạn chế nghiêm trọng việc học của bạn về lâu dài. Mục tiêu của quá trình phát triển các chương trong cuốn sách này là cung cấp cho bạn khả năng viết các mạng nơ-ron hiệu suất cực cao (bằng cách dạy bạn PyTorch) trong khi vẫn thiết lập cho bạn khả năng học tập lâu dài và thành công (bằng cách dạy bạn các nguyên tắc cơ bản trước khi bạn học PyTorch . Chúng ta sẽ kết thúc bằng một minh họa nhanh về cách mạng lưới thần kinh có thể được sử dụng cho việc học tập không giám sát. Mục tiêu của tôi ở đây là viết cuốn sách mà tôi ước đã tồn tại khi tôi bắt đầu tìm hiểu chủ đề này vài năm trước. Tôi hy vọng bạn sẽ tìm thấy cuốn sách này hữu ích. trở đi. Các quy ước được sử dụng trong cuốn sách này Các quy ước đánh máy sau đây được sử dụng trong cuốn sách này. Chữ nghiêng Cho biết các thuật ngữ, URL, địa chỉ, tên tệp và phần mở rộng tệp mới. Độ rộng không đổi Được sử dụng cho danh sách chương trình, cũng như trong các đoạn văn để tham chiếu đến các thành phần chương trình như tên biến hoặc hàm, cơ sở dữ liệu, kiểu dữ liệu, biến môi trường, câu lệnh và từ khóa. Độ rộng không đổi đậm Hiển thị các lệnh hoặc văn bản khác mà người dùng nên nhập theo nghĩa đen. Chữ nghiêng có độ rộng không đổi Được sử dụng cho văn bản cần được thay thế bằng các giá trị do người dùng cung cấp hoặc bằng các giá trị được xác định theo ngữ cảnh và cho nhận xét trong các ví dụ về mã. Định lý Pitago là. GHI CHÚ

12 Yếu tố này biểu thị một lưu ý chung. Sử dụng ví dụ về mã Tài liệu bổ sung (ví dụ về mã, bài tập, v.v. ) có sẵn để tải xuống tại kho GitHub của cuốn sách. Cuốn sách này ở đây để giúp bạn hoàn thành công việc của mình. Nói chung, nếu mã ví dụ được cung cấp cùng với cuốn sách này, bạn có thể sử dụng nó trong các chương trình và tài liệu của mình. Bạn không cần phải liên hệ với chúng tôi để xin phép trừ khi bạn sao chép một phần quan trọng của mã. Ví dụ: viết một chương trình sử dụng một số đoạn mã từ cuốn sách này không cần sự cho phép. Bán hoặc phân phối đĩa CD-ROM ví dụ từ sách của O Reilly phải được phép. Trả lời câu hỏi bằng cách trích dẫn cuốn sách này và trích dẫn mã ví dụ không cần xin phép. Việc kết hợp một số lượng đáng kể mã ví dụ từ cuốn sách này vào tài liệu sản phẩm của bạn cần phải có sự cho phép. Chúng tôi đánh giá cao, nhưng không yêu cầu, ghi công. Ghi công thường bao gồm tiêu đề, tác giả, nhà xuất bản và ISBN. Ví dụ. Học sâu từ đầu của Seth Weidman (O Reilly). Bản quyền 2019 Seth Weidman, Nếu bạn cảm thấy việc sử dụng các ví dụ mã của mình nằm ngoài mục đích sử dụng hợp lý hoặc không được phép ở trên, vui lòng liên hệ với chúng tôi tại O Reilly Online Learning LƯU Ý Trong gần 40 năm, O Reilly Media đã cung cấp kiến ​​thức, đào tạo về công nghệ và kinh doanh . Mạng lưới chuyên gia và nhà đổi mới độc đáo của chúng tôi chia sẻ kiến ​​thức và chuyên môn của họ thông qua sách, bài báo, hội nghị và nền tảng học tập trực tuyến của chúng tôi. Nền tảng học tập trực tuyến của O Reilly cung cấp cho bạn quyền truy cập theo yêu cầu vào các khóa đào tạo trực tiếp, lộ trình học tập chuyên sâu, môi trường viết mã tương tác và

13 bộ sưu tập văn bản và video từ O Reilly và hơn 200 nhà xuất bản khác. Để biết thêm thông tin, vui lòng truy cập Cách liên hệ với chúng tôi Vui lòng gửi các nhận xét và câu hỏi liên quan đến cuốn sách này cho nhà xuất bản. O Reilly Media, Inc Gravenstein Highway North Sebastopol, CA (tại Hoa Kỳ hoặc Canada) (quốc tế hoặc địa phương) (fax) Chúng tôi có một trang web cho cuốn sách này, nơi chúng tôi liệt kê các lỗi sai, ví dụ và bất kỳ thông tin bổ sung nào. Bạn có thể truy cập trang này tại để bình luận hoặc đặt câu hỏi kỹ thuật về cuốn sách này. For more information about our books, courses, conferences, and news, see our website at Find us on Facebook. Follow us on Twitter. Watch us on YouTube. Lời cảm ơn Tôi muốn cảm ơn biên tập viên của tôi, Melissa Potter, cùng với nhóm tại O Reilly, những người đã tỉ mỉ đưa ra phản hồi và trả lời các câu hỏi của tôi trong suốt quá trình

14 quá trình. Tôi muốn gửi lời cảm ơn đặc biệt đến một số người mà công việc của họ là làm cho các khái niệm kỹ thuật trong máy học có thể tiếp cận được với nhiều đối tượng hơn đã ảnh hưởng trực tiếp đến tôi và một vài người trong số họ mà tôi đã may mắn được quen biết. theo thứ tự được tạo ngẫu nhiên, những người này là Brandon Rohrer, Joel Grus, Jeremy Watt và Andrew Trask. Tôi muốn cảm ơn sếp của tôi tại Metis và giám đốc của tôi tại Facebook, những người đã hỗ trợ tôi một cách vô lý trong việc dành thời gian cho dự án này. Tôi muốn gửi lời cảm ơn và lời cảm ơn đặc biệt đến Mat Leonard, người đã từng là đồng tác giả của tôi trong một khoảng thời gian ngắn trước khi chúng tôi quyết định đường ai nấy đi. Mat đã giúp tổ chức mã cho thư viện nhỏ liên kết với cuốn sách lincoln và cho tôi phản hồi rất hữu ích về một số phiên bản cực kỳ không được trau chuốt của hai chương đầu tiên, đồng thời viết các phiên bản riêng của anh ấy cho các phần lớn của các chương này trong quá trình này. Cuối cùng, tôi muốn cảm ơn những người bạn của tôi là Eva và John, cả hai người đã trực tiếp khuyến khích và truyền cảm hứng để tôi dấn thân và thực sự bắt đầu viết. Tôi cũng muốn cảm ơn nhiều bạn bè của tôi ở San Francisco, những người đã bao dung cho mối bận tâm và lo lắng chung của tôi về cuốn sách cũng như việc tôi không có thời gian để đi chơi trong nhiều tháng, và những người đã kiên quyết ủng hộ khi tôi cần họ. 1 Công bằng mà nói, ví dụ này nhằm mục đích minh họa thư viện PyTorch cho những người đã hiểu về mạng nơ-ron chứ không phải là một hướng dẫn mang tính hướng dẫn. Tuy nhiên, nhiều hướng dẫn theo phong cách này, chỉ hiển thị mã cùng với một số giải thích ngắn gọn. 2 Cụ thể, trong trường hợp thuật toán sắp xếp, tại sao thuật toán kết thúc với một danh sách được sắp xếp đúng

15 Chương 1. Nền tảng Đừng ghi nhớ những công thức này. Nếu bạn hiểu các khái niệm, bạn có thể phát minh ra ký hiệu của riêng mình. John Cochrane, Investments Notes 2006 Mục đích của chương này là giải thích một số mô hình tinh thần cơ bản cần thiết để hiểu cách thức hoạt động của mạng lưới thần kinh. Cụ thể, chúng tôi sẽ đề cập đến các hàm toán học lồng nhau và các đạo hàm của chúng. Chúng ta sẽ làm việc theo cách của mình từ các khối xây dựng đơn giản nhất có thể để chứng minh rằng chúng ta có thể xây dựng các hàm phức tạp được tạo thành từ một chuỗi các hàm cấu thành và, ngay cả khi một trong các hàm này là phép nhân ma trận có nhiều đầu vào, tính đạo hàm của . Hiểu cách thức hoạt động của quy trình này sẽ rất cần thiết để hiểu về mạng nơ-ron, mà về mặt kỹ thuật, chúng tôi sẽ không bắt đầu đề cập cho đến Chương 2. Khi chúng ta tìm hiểu về các khối xây dựng cơ bản này của mạng lưới thần kinh, chúng ta sẽ mô tả một cách có hệ thống từng khái niệm mà chúng ta giới thiệu từ ba quan điểm. Toán, ở dạng phương trình hoặc phương trình Mã, càng ít cú pháp bổ sung càng tốt (làm cho Python trở thành lựa chọn lý tưởng) Sơ đồ giải thích những gì đang diễn ra, thuộc loại bạn sẽ vẽ trên bảng trắng trong một cuộc phỏng vấn viết mã Như đã đề cập trong . Chúng ta sẽ hiểu điều đó trong chương này. mỗi quan điểm trong số ba quan điểm này loại trừ một số đặc điểm thiết yếu nhất định của các khái niệm mà chúng ta sẽ đề cập và chỉ khi được kết hợp với nhau, chúng mới cung cấp một bức tranh đầy đủ về cả cách thức và lý do các hàm toán học lồng nhau hoạt động theo cách chúng hoạt động. Trên thực tế, tôi có quan điểm mạnh mẽ duy nhất rằng mọi nỗ lực giải thích các khối xây dựng của mạng lưới thần kinh loại trừ một trong ba quan điểm này đều không đầy đủ

16 Với điều đó, đã đến lúc chúng ta thực hiện những bước đầu tiên. Chúng ta sẽ bắt đầu với một số khối xây dựng cực kỳ đơn giản để minh họa cách chúng ta có thể hiểu các khái niệm khác nhau theo ba quan điểm này. Khối xây dựng đầu tiên của chúng tôi sẽ là một khái niệm đơn giản nhưng quan trọng. chức năng. Hàm Hàm là gì và chúng ta mô tả nó như thế nào? . Thay vì cố gắng đưa ra một mô tả súc tích trong một câu, chúng ta hãy lần lượt đi qua ba mô hình tinh thần, đóng vai những người mù cảm nhận các bộ phận khác nhau của con voi. Toán Dưới đây là hai ví dụ về hàm, được mô tả bằng ký hiệu toán học. f (x) = x 1 f (x) = max(x, 0) 2 Ký hiệu này nói rằng các hàm, mà chúng ta tùy ý gọi là f 1 và f 2, nhận một số x làm đầu vào và biến đổi nó thành x 2 . Sơ đồ 2 Một cách để mô tả các chức năng là. 1. Vẽ mặt phẳng x-y (trong đó x là trục hoành và y là trục tung). 2. Vẽ một loạt các điểm, trong đó tọa độ x của các điểm là đầu vào (thường cách đều nhau) của hàm trên một số phạm vi và tọa độ y là đầu ra của hàm trong phạm vi đó. 3. Kết nối các điểm được vẽ. Điều này lần đầu tiên được thực hiện bởi nhà triết học người Pháp René Descartes, và đó là

17 cực kỳ hữu ích trong nhiều lĩnh vực toán học, đặc biệt là giải tích. Hình 1-1 cho thấy đồ thị của hai hàm này. Hình 1-1. Hai hàm liên tục, gần như khả vi. Tuy nhiên, có một cách khác để mô tả các hàm không hữu ích khi học giải tích nhưng sẽ rất hữu ích cho chúng ta khi nghĩ về các mô hình học sâu. Chúng ta có thể nghĩ về các hàm như những chiếc hộp lấy số làm đầu vào và tạo ra số làm đầu ra, giống như các nhà máy nhỏ có quy tắc nội bộ của riêng chúng đối với những gì xảy ra với đầu vào. Hình 1-2 cho thấy cả hai chức năng này được mô tả dưới dạng các quy tắc chung và cách chúng hoạt động trên các đầu vào cụ thể. Hình 1-2. Một cách khác để xem xét các chức năng này

18 Mã Cuối cùng, chúng ta có thể mô tả các chức năng này bằng mã. Trước khi thực hiện, chúng ta nên nói một chút về thư viện Python, trên đó chúng ta sẽ viết các hàm của mình. NumPy. Code caveat #1. NumPy NumPy là một thư viện Python được sử dụng rộng rãi để tính toán số nhanh, phần bên trong hầu hết được viết bằng C. Chỉ cần đặt. dữ liệu mà chúng ta xử lý trong các mạng thần kinh sẽ luôn được giữ trong một mảng đa chiều, hầu như luôn là một, hai, ba hoặc bốn chiều, nhưng đặc biệt là hai hoặc ba chiều. Lớp ndarray từ thư viện NumPy cho phép chúng tôi thao tác trên các mảng này theo cách (a) trực quan và (b) nhanh chóng. Để lấy ví dụ đơn giản nhất có thể. nếu chúng tôi đang lưu trữ dữ liệu của mình trong danh sách Python (hoặc danh sách danh sách), thì việc thêm hoặc nhân danh sách theo từng phần tử bằng cú pháp thông thường sẽ không hoạt động, trong khi nó hoạt động đối với ndarrays. print("thao tác danh sách python. ") a = [1,2,3] b = [4,5,6] print("a+b. ", a+b) cố lên. in(a*b) ngoại trừ TypeError. print("a*b không có ý nghĩa đối với danh sách Python") print() print("các hoạt động của mảng có nhiều mảng. ") a = np. mảng([1,2,3]) b = np. mảng([4,5,6]) print("a+b. ", a+b) print("a*b. ", a*b) Hoạt động danh sách Python. a+b. [1, 2, 3, 4, 5, 6] a*b không có ý nghĩa gì đối với Python liệt kê các phép toán mảng có nhiều mảng. a+b. [5 7 9] a*b. [ ] ndarrays cũng có một số tính năng mà bạn mong đợi từ một mảng n chiều;

19 mỗi ndarray có n trục, được lập chỉ mục từ 0, sao cho trục đầu tiên là 0, trục thứ hai là 1, v.v. Đặc biệt, vì chúng ta thường xử lý các mảng 2D, nên chúng ta có thể coi axis = 0 là các hàng và axis = 1 là các cột, xem Hình 1-3. Hình 1-3. Mảng 2D NumPy, với axis = 0 là hàng và axis = 1 là cột Các ndarray của NumPy cũng hỗ trợ áp dụng các hàm dọc theo các trục này theo cách trực quan. Ví dụ: tính tổng dọc theo trục 0 (các hàng cho mảng 2D) về cơ bản sẽ thu gọn mảng dọc theo trục đó, trả về một mảng có ít thứ nguyên hơn mảng ban đầu; . in ('a. ') in(a) in('a. tổng (trục = 0). ', một. tổng (trục = 0)) in ('a. tổng (trục = 1). ', một. tổng (trục = 1)) a. [[1 2] [3 4]] một. tổng (trục = 0). [4 6] một. tổng (trục = 1). [3 7] Cuối cùng, ndarrays NumPy hỗ trợ thêm mảng 1D vào trục cuối cùng; . 1

20 một = np. mảng([[1,2,3], [4,5,6]]) b = np. mảng([10,20,30]) print("a+b. \n", a+b) a+b. [[ ] [ ]] Lưu ý mã số 2. Các hàm kiểm tra kiểu Như tôi đã đề cập, mục tiêu chính của mã chúng tôi viết trong cuốn sách này là làm cho các khái niệm mà tôi đang giải thích trở nên chính xác và rõ ràng. Điều này sẽ khó khăn hơn khi cuốn sách tiếp tục, vì chúng ta sẽ viết các hàm với nhiều đối số như một phần của các lớp phức tạp. Để chống lại điều này, chúng ta sẽ sử dụng các hàm có chữ ký kiểu xuyên suốt; . def init (bản thân, các lớp. Danh sách [Layer], mất mát. Thua, learning_rate. nổi = 0. 01) -> Không có. Chữ ký loại này một mình cung cấp cho bạn một số ý tưởng về những gì lớp được sử dụng cho. Ngược lại, hãy xem xét chữ ký kiểu sau mà chúng ta có thể sử dụng để xác định một thao tác. thao tác xác định (x1, x2). This type signature by itself gives you no hint as to what is going on; only by printing out each object s type, seeing what operations get performed on each object, or guessing based on the names x1 and x2 could we understand what is going on in this function. Thay vào đó, tôi có thể định nghĩa một hàm có chữ ký kiểu như sau. hoạt động def (x1. ndarray, x2. ndarray) -> ndarray. Bạn biết ngay rằng đây là một chức năng có hai ndarray, có lẽ

21 kết hợp chúng theo một cách nào đó và đưa ra kết quả của sự kết hợp đó. Do chúng mang lại sự rõ ràng hơn, chúng ta sẽ sử dụng các hàm kiểm tra kiểu trong suốt cuốn sách này. Các hàm cơ bản trong NumPy Với những điều cơ bản này, hãy viết các hàm chúng ta đã xác định trước đó trong NumPy. hình vuông chắc chắn (x. ndarray) -> ndarray. ''' Vuông từng phần tử trong ndarray đầu vào. ''' trả lại np. power(x, 2) def leaky_relu(x. ndarray) -> ndarray. ''' Áp dụng chức năng "Leaky ReLU" cho từng phần tử trong ndarray. ''' trả lại np. tối đa (0. 2 * x, x) LƯU Ý Một trong những điều kỳ quặc của NumPy là nhiều chức năng có thể được áp dụng cho ndarray bằng cách viết np. function_name(ndarray) hoặc bằng cách viết ndarray. Tên chức năng. Ví dụ: hàm relu trước đó có thể được viết là. x. clip (tối thiểu = 0). Chúng tôi sẽ cố gắng nhất quán và sử dụng np. đặc biệt là trong quy ước function_name(ndarray), chúng ta sẽ tránh các thủ thuật như ndarray. t để chuyển đổi một ndarray hai chiều, thay vào đó hãy viết np. chuyển vị (ndarray, (1, 0)). Nếu bạn có thể hiểu được thực tế rằng toán học, sơ đồ và mã là ba cách khác nhau để thể hiện cùng một khái niệm cơ bản, thì bạn đang trên đường thể hiện kiểu tư duy linh hoạt mà bạn sẽ cần để thực sự hiểu về học sâu. Đạo hàm Đạo hàm, giống như hàm, là một khái niệm cực kỳ quan trọng để hiểu về deep learning mà có lẽ nhiều bạn đã quen thuộc. Also

22 like functions, they can be depicted in multiple ways. We ll start by simply saying at a high level that the derivative of a function at a point is the rate of change of the output of the function with respect to its input at that point. Let s now walk through the same three perspectives on derivatives that we covered for functions to gain a better mental model for how derivatives work. Math First, we ll get mathematically precise. chúng ta có thể mô tả con số này đầu ra của f thay đổi bao nhiêu khi chúng ta thay đổi đầu vào của nó ở một giá trị cụ thể a của đầu vào dưới dạng giới hạn. Giới hạn này có thể được xấp xỉ bằng số bằng cách đặt một giá trị rất nhỏ cho Δ, chẳng hạn như 0. 001, vì vậy chúng ta có thể tính đạo hàm là. Mặc dù chính xác, đây chỉ là một phần của mô hình tinh thần đầy đủ về các công cụ phái sinh. Hãy nhìn chúng từ một khía cạnh khác. một biểu đồ. Sơ đồ Đầu tiên, cách quen thuộc. nếu chúng ta chỉ đơn giản vẽ một đường tiếp tuyến với biểu diễn Descartes của hàm f, thì đạo hàm của f tại một điểm a chính là hệ số góc của đường thẳng này tại một. Như với các mô tả toán học trong tiểu mục trước, có hai cách chúng ta thực sự có thể tính toán độ dốc của đường này. Đầu tiên là sử dụng phép tính để thực sự tính toán giới hạn. Phương pháp thứ hai là chỉ lấy hệ số góc của đường nối f tại a và a. Phương pháp thứ hai được mô tả trong Hình 1-4 và sẽ quen thuộc với bất kỳ ai đã từng học giải tích.

23 Hình 1-4. Đạo hàm dưới dạng hệ số góc Như chúng ta đã thấy trong phần trước, một cách nghĩ khác về các hàm là các nhà máy nhỏ. Bây giờ hãy nghĩ về đầu vào của các nhà máy đó được kết nối với đầu ra bằng một chuỗi. Đạo hàm bằng với câu trả lời cho câu hỏi này. nếu chúng ta kéo đầu vào của hàm a lên một lượng rất nhỏ hoặc, để tính đến thực tế là hàm có thể không đối xứng tại a, hãy kéo xuống a một lượng nhỏ bằng bội số của lượng nhỏ này thì đầu ra sẽ . Hình 1-5. Một cách khác để hình dung các đạo hàm Cách biểu diễn thứ hai này sẽ trở nên quan trọng hơn cách thứ nhất để hiểu về học sâu

24 Code Cuối cùng, chúng ta có thể mã hóa xấp xỉ đạo hàm mà chúng ta đã thấy trước đó. từ việc gõ import Callable def deriv(func. Có thể gọi [[ndarray], ndarray], đầu vào_. ndarray, đồng bằng. nổi = 0. 001) -> ndarray. ''' Đánh giá đạo hàm của hàm "func" tại mọi phần tử trong mảng "input_". ''' return (func(input_ + delta) - func(input_ - delta)) / (2 * delta) LƯU Ý Khi chúng ta nói rằng một thứ gì đó là chức năng của một thứ khác chẳng hạn, P đó là một hàm của E (các chữ cái được chọn . Chúng ta cũng có thể coi điều này có nghĩa là P được định nghĩa là bất kỳ kết quả nào khi chúng ta áp dụng hàm f cho E. Và chúng tôi sẽ mã này lên như. def f(đầu vào_. ndarray) -> ndarray. # Một số phép biến đổi trả về đầu ra P = f(e) Hàm lồng nhau

25 Bây giờ chúng ta sẽ đề cập đến một khái niệm sẽ trở thành nền tảng để hiểu về mạng lưới thần kinh. các hàm có thể được lồng vào nhau để tạo thành các hàm tổng hợp. Chính xác ý tôi là gì khi lồng nhau? . Sơ đồ Cách tự nhiên nhất để biểu diễn một hàm lồng nhau là với biểu diễn hộp hoặc nhà máy nhỏ (biểu diễn thứ hai từ Hàm). Như Hình 1-6 cho thấy, một đầu vào đi vào chức năng đầu tiên, được biến đổi và đi ra; . Hình 1-6. Các hàm lồng nhau, tự nhiên Toán học Chúng ta cũng nên bao gồm biểu diễn toán học ít trực quan hơn. Điều này ít trực quan hơn do sự khó hiểu là các chức năng lồng nhau được đọc từ ngoài vào trong nhưng thực tế các hoạt động được thực hiện từ trong ra ngoài. Ví dụ, mặc dù được đọc là f 2 của f 1 của x, nhưng ý nghĩa thực sự của nó là trước tiên áp dụng f cho x, sau đó áp dụng f cho kết quả của việc áp dụng f cho x. Viết mã Cuối cùng, để giữ lời hứa giải thích mọi khái niệm từ ba khía cạnh, chúng ta sẽ viết mã này. Đầu tiên, chúng ta sẽ định nghĩa một kiểu dữ liệu cho các hàm lồng nhau

26 from typing import List # Một Hàm nhận ndarray làm đối số và tạo ra một ndarray Array_Function = Callable[[ndarray], ndarray] # Một Chuỗi là một danh sách các hàm Chuỗi = Danh sách[Array_Function] Sau đó, chúng ta sẽ xác định cách dữ liệu di chuyển . def chain_length_2(chuỗi. Chuỗi, một. ndarray) -> ndarray. ''' Evaluates two functions in a row, in a "Chain". ''' assert len(chain) == 2, \ "Độ dài của 'chuỗi' đầu vào phải là 2" f1 = chain[0] f2 = chain[1] return f2(f1(x)) Một sơ đồ khác Mô tả hàm lồng nhau . Do đó, chúng ta có thể biểu diễn hàm này đơn giản là f f, như trong Hình Hình 1-7. Một cách khác để nghĩ về các hàm lồng nhau Hơn nữa, một định lý từ giải tích cho chúng ta biết rằng một hàm tổng hợp được tạo thành từ các hàm hầu hết khả vi thì bản thân nó cũng khả vi nhất. Do đó, chúng ta có thể coi f1f 2 chỉ là một hàm khác mà chúng ta có thể tính đạo hàm và việc tính toán đạo hàm của các hàm tổng hợp sẽ trở nên cần thiết để đào tạo các mô hình học sâu

27 Tuy nhiên, chúng ta cần một công thức để có thể tính đạo hàm của hàm hợp này theo đạo hàm của các hàm hợp thành của nó. Đó là những gì chúng ta sẽ đề cập tiếp theo. Quy tắc dây chuyền Quy tắc dây chuyền là một định lý toán học cho phép chúng ta tính các đạo hàm của các hàm hợp. Các mô hình học sâu, về mặt toán học, là các hàm tổng hợp và lý luận về các đạo hàm của chúng là điều cần thiết để đào tạo chúng, như chúng ta sẽ thấy trong vài chương tiếp theo. Toán học Về mặt toán học, định lý phát biểu dưới dạng khá phi trực giác rằng, với một giá trị x cho trước, trong đó u chỉ đơn giản là một biến giả đại diện cho đầu vào của một hàm. LƯU Ý Khi mô tả đạo hàm của hàm f với một đầu vào và đầu ra, chúng ta có thể ký hiệu hàm đại diện cho đạo hàm của hàm này là. Chúng ta có thể sử dụng một biến giả 2 2 khác thay cho u, điều đó không thành vấn đề, giống như f(x) = x và f(y) = y có nghĩa giống nhau. Mặt khác, sau này chúng ta sẽ xử lý các hàm nhận nhiều đầu vào, ví dụ, cả x và y. Khi chúng tôi đến đó, sẽ rất hợp lý khi viết và khiến nó có ý nghĩa gì đó khác với. Đây là lý do tại sao trong công thức trước, chúng ta biểu thị tất cả các đạo hàm có chữ u ở phía dưới. cả f 1 và f 2 đều là các hàm nhận một đầu vào và tạo ra một đầu ra, và trong những trường hợp như vậy (của các hàm có một đầu vào và một đầu ra), chúng ta sẽ sử dụng u trong ký hiệu đạo hàm. Sơ đồ Công thức trước không đưa ra nhiều trực giác về quy tắc dây chuyền. Đối với điều đó,

28 biểu diễn hộp hữu ích hơn nhiều. Hãy lý luận xem đạo hàm phải bằng bao nhiêu trong trường hợp đơn giản của f f. 1 2 Hình 1-8. Một minh họa về quy tắc dây chuyền Theo trực giác, sử dụng sơ đồ trong Hình 1-8, đạo hàm của hàm hợp phải là một loại tích của các đạo hàm của các hàm hợp thành của nó. Giả sử chúng ta nạp giá trị 5 vào hàm đầu tiên và giả sử thêm rằng việc tính đạo hàm của hàm đầu tiên tại u = 5 cho chúng ta giá trị 3, nghĩa là,. Giả sử rằng sau đó chúng ta lấy giá trị của hàm xuất phát từ hộp đầu tiên, giả sử nó là 1, sao cho f (5) = 1 và tính đạo hàm của hàm thứ hai f tại giá trị này. đó là,. Chúng tôi thấy rằng giá trị này là 2. 2 Nếu chúng ta nghĩ về các chức năng này như được xâu chuỗi lại với nhau theo đúng nghĩa đen, thì nếu thay đổi đầu vào sang hộp hai bằng 1 đơn vị thì đầu ra của hộp hai thay đổi 2 đơn vị, thay đổi đầu vào sang hộp hai bằng 3 đơn vị sẽ thay đổi đầu ra . Đây là lý do tại sao trong công thức của quy tắc dây chuyền, kết quả cuối cùng cuối cùng là một sản phẩm. lần. 1 Vì vậy, bằng cách xem xét sơ đồ và toán học, chúng ta có thể suy luận xem đạo hàm của đầu ra của một hàm lồng nhau đối với đầu vào của nó phải bằng bao nhiêu, bằng cách sử dụng quy tắc dây chuyền. Hướng dẫn mã cho việc tính toán đạo hàm này có thể trông như thế nào?

29 Viết mã Hãy viết mã này và chỉ ra rằng tính toán đạo hàm theo cách này trên thực tế mang lại kết quả có vẻ đúng. Chúng ta sẽ sử dụng hàm bình phương từ Hàm cơ bản trong NumPy cùng với sigmoid, một hàm khác rất quan trọng trong học sâu. def sigmoid(x. ndarray) -> ndarray. ''' Áp dụng hàm sigmoid cho từng phần tử trong ndarray đầu vào. ''' trả về 1 / (1 + np. exp(-x)) Và bây giờ chúng ta mã hóa quy tắc chuỗi. def chain_deriv_2(chuỗi. Chuỗi, input_range. ndarray) -> ndarray. ''' Sử dụng quy tắc dây chuyền để tính đạo hàm của hai hàm lồng nhau. (f2(f1(x))' = f2'(f1(x)) * f1'(x) ''' assert len(chain) == 2, \ "Hàm này yêu cầu các đối tượng 'Chuỗi' có độ dài 2" khẳng định . ndim == 1, \ "Hàm yêu cầu ndarray 1 chiều làm phạm vi_đầu vào" f1 = chain[0] f2 = chain[1] # df1/dx f1_of_x = f1(phạm vi đầu vào) # df1/du df1dx = deriv(f1, phạm vi đầu vào)

30 PLOT_RANGE = np. sắp xếp (-3, 3, 0. 01) chain_1 = [square, sigmoid] chain_2 = [sigmoid, square] plot_chain(chain_1, PLOT_RANGE) plot_chain_deriv(chain_1, PLOT_RANGE) plot_chain(chain_2, PLOT_RANGE) plot_chain_deriv(chain_2, PLOT_RANGE) Hình 1-9. Quy tắc dây chuyền hoạt động, phần 1 Quy tắc dây chuyền dường như đang hoạt động. Khi các hàm dốc lên, đạo hàm dương; . Vì vậy, trên thực tế, chúng ta có thể tính toán, cả về mặt toán học và thông qua mã, đạo hàm của các hàm lồng nhau hoặc hàm hỗn hợp chẳng hạn như f 1 f 2, miễn là bản thân các hàm riêng lẻ hầu hết đều khả vi. Hóa ra các mô hình học sâu, về mặt toán học, là các chuỗi dài của các hàm chủ yếu là khả vi này;

31 Ví dụ dài hơn một chút Chúng ta hãy xem xét kỹ một chuỗi dài hơn một chút. nếu chúng ta có ba hàm gần như khả vi f 1, f 2 và f 3 thì chúng ta sẽ tính đạo hàm của f 1 f 2 f 3 như thế nào? . Toán học Về mặt toán học, kết quả hóa ra là biểu thức sau. Logic cơ bản về lý do tại sao công thức hoạt động cho các chuỗi có độ dài 2, trực giác khi chỉ nhìn vào công thức. Sơ đồ, cũng được áp dụng ở đây cũng như việc thiếu Cách tốt nhất để (theo nghĩa đen) thấy tại sao công thức này có ý nghĩa là thông qua một sơ đồ hộp khác, như trong Hình Hình Mô hình hộp để tính đạo hàm của ba hàm lồng nhau Sử dụng lý luận tương tự như . nếu chúng ta tưởng tượng đầu vào của f 1 f 2 f3 (gọi là a) được kết nối với đầu ra (gọi là b) bằng một chuỗi, thì việc thay đổi a một lượng nhỏ Δ sẽ dẫn đến thay đổi f (a) lần . 1

32 Hãy dành một chút thời gian để xem qua lời giải thích này và sơ đồ trước đó nhưng không quá nhiều thời gian, vì chúng ta sẽ phát triển nhiều trực giác hơn nữa cho điều này khi chúng ta viết mã cho nó. Mã Làm cách nào chúng ta có thể dịch một công thức như vậy thành các hướng dẫn mã để tính toán đạo hàm, với các hàm cấu thành? . def chain_deriv_3(chuỗi. Chuỗi, input_range. ndarray) -> ndarray. ''' Sử dụng quy tắc dây chuyền để tính đạo hàm của ba hàm lồng nhau. (f3(f2(f1)))' = f3'(f2(f1(x))) * f2'(f1(x)) * f1'(x) ''' khẳng định len(chuỗi) == 3, \

33 1. Đầu tiên, chúng tôi tiếp tục với nó, tính toán các đại lượng f1_of_x và f2_of_x trên đường đi. Chúng ta có thể gọi đây (và nghĩ về nó như) đường chuyền về phía trước. 2. Sau đó, chúng tôi đi ngược lại thông qua hàm, sử dụng các đại lượng mà chúng tôi đã tính toán trong lần chuyển tiếp để tính toán các đại lượng tạo nên đạo hàm. Cuối cùng, chúng tôi nhân ba trong số các đại lượng này với nhau để có được đạo hàm của chúng tôi. Bây giờ, hãy chứng minh rằng điều này hoạt động, bằng cách sử dụng ba hàm đơn giản mà chúng ta đã xác định cho đến nay. sigmoid, hình vuông và rò rỉ_relu. PLOT_RANGE = np. phạm vi (-3, 3, 0. 01) plot_chain([leaky_relu, sigmoid, square], PLOT_RANGE) plot_chain_deriv([leaky_relu, sigmoid, square], PLOT_RANGE) Hình 1-11 cho thấy kết quả. Hình Quy tắc dây chuyền hoạt động, ngay cả với các hàm lồng ba lần Một lần nữa, so sánh đồ thị của các đạo hàm với hệ số góc của các hàm ban đầu, chúng ta thấy rằng quy tắc dây chuyền thực sự đang tính toán các đạo hàm một cách chính xác. Bây giờ, hãy áp dụng hiểu biết của chúng ta vào các hàm tổng hợp có nhiều đầu vào, một lớp các hàm tuân theo các nguyên tắc giống như chúng ta đã thiết lập và cuối cùng có thể áp dụng nhiều hơn cho học sâu

34 Các hàm có nhiều đầu vào Đến thời điểm này, chúng ta đã hiểu khái niệm về cách các hàm có thể được xâu chuỗi lại với nhau để tạo thành các hàm tổng hợp. Chúng tôi cũng có ý thức về cách biểu diễn các chức năng này dưới dạng một loạt hộp mà đầu vào đi vào và đầu ra đi ra. Cuối cùng, chúng ta đã tìm hiểu cách tính đạo hàm của các hàm này để chúng ta hiểu các đạo hàm này cả về mặt toán học và dưới dạng đại lượng được tính toán thông qua quy trình từng bước với thành phần tiến và lùi. Thông thường, các chức năng mà chúng ta xử lý trong deep learning không chỉ có một đầu vào. Thay vào đó, chúng có một số đầu vào mà tại các bước nhất định được cộng với nhau, nhân lên hoặc kết hợp với nhau. Như chúng ta sẽ thấy, việc tính toán đạo hàm của đầu ra của các hàm này đối với đầu vào của chúng vẫn không có vấn đề gì. Hãy xem xét một tình huống rất đơn giản với nhiều đầu vào, trong đó hai đầu vào được cộng lại với nhau và sau đó được cung cấp thông qua một chức năng khác. Toán học Đối với ví dụ này, thực sự hữu ích khi bắt đầu bằng cách nhìn vào toán học. Nếu đầu vào của chúng tôi là x và y, thì chúng tôi có thể coi hàm này xảy ra theo hai bước. Ở Bước 1, x và y được cung cấp thông qua một hàm cộng chúng lại với nhau. Chúng ta sẽ ký hiệu hàm đó là α (chúng ta sẽ sử dụng các chữ cái Hy Lạp để chỉ tên hàm xuyên suốt) và đầu ra của hàm dưới dạng một. Về mặt hình thức, đây chỉ đơn giản là. Bước 2 sẽ là cung cấp a thông qua một số hàm σ (σ có thể là bất kỳ hàm liên tục nào, chẳng hạn như hàm sigmoid hoặc hàm bình phương hoặc thậm chí là một hàm có tên không bắt đầu bằng s). Chúng ta sẽ ký hiệu đầu ra của hàm này là s. Tương tự, chúng ta có thể biểu thị toàn bộ hàm là f và viết. Điều này ngắn gọn hơn về mặt toán học, nhưng nó che khuất sự thật rằng đây thực sự là

35 hai thao tác xảy ra tuần tự. Để minh họa điều đó, chúng ta cần sơ đồ trong phần tiếp theo. Sơ đồ Bây giờ chúng ta đang ở giai đoạn kiểm tra các chức năng có nhiều đầu vào, hãy tạm dừng để xác định một khái niệm mà chúng ta đang tìm hiểu xung quanh. các sơ đồ với các vòng tròn và mũi tên kết nối chúng biểu thị thứ tự toán học của các hoạt động có thể được coi là đồ thị tính toán. Ví dụ, Hình 1-12 cho thấy đồ thị tính toán của hàm f mà chúng ta vừa mô tả. Hình Hàm có nhiều đầu vào Ở đây chúng ta thấy hai đầu vào đi vào α và đi ra dưới dạng a và sau đó được đưa qua σ. Mã Viết mã này rất đơn giản; . def multiple_inputs_add(x. ndarray, y. ndarray, sigma. Array_Function) -> float. ''' Hàm có nhiều đầu vào và bổ sung, chuyển tiếp. ''' khẳng định x. shape == y. shape a = x + y return sigma(a) Không giống như các hàm chúng ta đã thấy trước đó trong chương này, hàm này không chỉ hoạt động theo từng phần tử trên mỗi phần tử của ndarray đầu vào của nó. Bất cứ khi nào chúng tôi xử lý một thao tác lấy nhiều ndarray làm đầu vào, chúng tôi phải kiểm tra hình dạng của chúng để đảm bảo chúng đáp ứng bất kỳ điều kiện nào mà thao tác đó yêu cầu

36 Ở đây, đối với một phép toán đơn giản như phép cộng, tất cả những gì chúng ta cần kiểm tra là các hình có giống nhau không để phép cộng có thể xảy ra theo từng phần tử. Đạo hàm của các hàm có nhiều đầu vào Không có gì đáng ngạc nhiên khi chúng ta có thể tính đạo hàm của đầu ra của một hàm như vậy đối với cả hai đầu vào của nó. Sơ đồ Về mặt khái niệm, chúng ta chỉ đơn giản làm điều tương tự như chúng ta đã làm trong trường hợp các hàm có một đầu vào. tính đạo hàm của từng hàm cấu thành đi ngược qua đồ thị tính toán rồi nhân các kết quả với nhau để có đạo hàm tổng. Điều này được thể hiện trong Hình Hình Hình Quay ngược qua đồ thị tính toán của một hàm có nhiều đầu vào Toán học Quy tắc dây chuyền áp dụng cho các hàm này giống như cách áp dụng cho các hàm trong các phần trước. Vì đây là hàm lồng nhau nên với , ta có. Và tất nhiên sẽ giống hệt nhau

37 Bây giờ hãy lưu ý rằng. vì cứ tăng một đơn vị trong x thì a tăng thêm một đơn vị, bất kể giá trị của x là bao nhiêu (tương tự với y). Dựa vào điều này, chúng ta có thể mã hóa cách chúng ta có thể tính đạo hàm của một hàm như vậy. Mã def multiple_inputs_add_backward(x. ndarray, y. ndarray, sigma. Array_Function) -> float. ''' Tính đạo hàm của hàm đơn giản này đối với cả hai đầu vào. ''' # Tính toán "chuyển tiếp" a = x + y # Tính toán đạo hàm dsda = deriv(sigma, a) dadx, dady = 1, 1 return dsda * dax, dsda * dady Một bài tập đơn giản dành cho người đọc là sửa đổi điều này . Tiếp theo, chúng ta sẽ xem xét một ví dụ phức tạp hơn mô phỏng chặt chẽ hơn những gì xảy ra trong học sâu. một chức năng tương tự như ví dụ trước, nhưng với hai đầu vào vectơ. Các hàm có nhiều đầu vào vectơ Trong học sâu, chúng ta xử lý các hàm có đầu vào là vectơ hoặc ma trận. Những đối tượng này không chỉ có thể được cộng, nhân, v.v., mà chúng còn có thể

38 kết hợp thông qua tích vô hướng hoặc phép nhân ma trận. Trong phần còn lại của chương này, tôi sẽ chỉ ra cách thức toán học của quy tắc dây chuyền và logic tính toán đạo hàm của các hàm này bằng cách sử dụng đường chuyền tiến và lùi vẫn có thể áp dụng. Những kỹ thuật này cuối cùng sẽ trở thành trung tâm để hiểu lý do tại sao học sâu hoạt động. Trong học sâu, mục tiêu của chúng tôi là khớp một mô hình với một số dữ liệu. Chính xác hơn, điều này có nghĩa là chúng ta muốn tìm một hàm toán học ánh xạ các quan sát từ dữ liệu sẽ là đầu vào của hàm tới một số dự đoán mong muốn từ dữ liệu sẽ là đầu ra của hàm theo cách tối ưu nhất có thể. Hóa ra những quan sát này sẽ được mã hóa trong ma trận, thường với hàng là một quan sát và mỗi cột là một đặc điểm số cho quan sát đó. Chúng tôi sẽ đề cập đến điều này chi tiết hơn trong chương tiếp theo; . Hãy bắt đầu bằng cách xác định chính xác những gì tôi muốn nói, về mặt toán học. Toán học Một cách điển hình để biểu diễn một điểm dữ liệu hoặc một quan sát trong mạng thần kinh là một hàng có n đặc điểm, trong đó mỗi đặc điểm chỉ đơn giản là một số x 1, x, v.v., cho đến x. 2 n Một ví dụ điển hình cần lưu ý ở đây là dự đoán giá nhà đất, mà chúng ta sẽ xây dựng một mạng lưới thần kinh từ đầu để thực hiện trong chương tiếp theo; . Tạo các tính năng mới từ các tính năng hiện có Có lẽ hoạt động phổ biến nhất trong các mạng thần kinh là tạo thành một tổng trọng số của các tính năng này, trong đó tổng trọng số có thể nhấn mạnh một số tính năng nhất định và không nhấn mạnh các tính năng khác và do đó được coi là một tính năng mới mà chính nó là . Một cách ngắn gọn để diễn đạt điều này một cách toán học là tích vô hướng của quan sát này, với một số tập hợp

39 trọng số có cùng độ dài với các đặc trưng, ​​w 1, w 2, v.v., lên đến w n. Hãy khám phá khái niệm này từ ba quan điểm mà chúng ta đã sử dụng cho đến nay trong chương này. Toán Để chính xác về mặt toán học, nếu. thì chúng ta có thể định nghĩa đầu ra của thao tác này là. Lưu ý rằng thao tác này là trường hợp đặc biệt của phép nhân ma trận chỉ là tích vô hướng vì X có một hàng và W chỉ có một cột. Tiếp theo, chúng ta hãy xem xét một số cách chúng ta có thể mô tả điều này bằng sơ đồ. Sơ đồ Một cách đơn giản để mô tả hoạt động này được thể hiện trong Hình 1-14

40 Hình Sơ đồ của tích véc tơ chấm Sơ đồ này mô tả một thao tác có hai đầu vào, cả hai đều có thể là ndarray và tạo ra một ndarray đầu ra. Nhưng đây thực sự là một tốc ký lớn cho nhiều hoạt động đang diễn ra trên nhiều đầu vào. Thay vào đó, chúng ta có thể làm nổi bật các hoạt động và đầu vào riêng lẻ, như trong Hình 1-15 và 1-16

41 Hình Một sơ đồ khác của phép nhân ma trận Hình Sơ đồ thứ ba của phép nhân ma trận Điểm mấu chốt là tích vô hướng (hoặc phép nhân ma trận) là một cách ngắn gọn để biểu diễn nhiều phép toán riêng lẻ; . Mã Cuối cùng, trong mã, hoạt động này chỉ đơn giản là. def matmul_forward(x. ndarray, W. ndarray) -> ndarray. ''' Tính chuyển tiếp của phép nhân ma trận. ''' khẳng định X. hình dạng [1] == W. shape[0], \ ''' Đối với phép nhân ma trận, số cột trong mảng đầu tiên phải khớp với số hàng trong mảng thứ hai; . '''. định dạng (x. hình dạng [1], W. shape[0]) # phép nhân ma trận N = np. dấu chấm (x, W) trả về N

42 where we have a new assertion that ensures that the matrix multiplication will work. (This is necessary since this is our first operation that doesn t merely deal with ndarrays that are the same size and perform an operation elementwise our output is now actually a different size than our input. ) Đạo hàm của các hàm có nhiều đầu vào vectơ Đối với các hàm chỉ lấy một đầu vào làm số và tạo ra một đầu ra, như f(x) = x 2 hoặc f(x) = sigmoid(x), việc tính đạo hàm rất đơn giản. we simply apply rules from calculus. Đối với các hàm vectơ, không rõ ràng ngay lập tức đạo hàm là gì. nếu chúng ta viết một tích vô hướng, như trong phần trước, câu hỏi đặt ra một cách tự nhiên là cái gì sẽ và cái gì?

Tôi có thể trực tiếp bắt đầu học deep learning không?

1 Answer. Có, bạn có thể trực tiếp tìm hiểu Học sâu , mà không cần học Học máy nhưng để giúp quá trình hiểu Học sâu trở nên dễ dàng, kiến ​​thức về Học máy .

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

Scratch-based Artificial Intelligence/Machine Learning This tool introduces machine learning by providing hands-on experiences for training machine learning systems and building things with them.

C ++ có được sử dụng trong học sâu không?

Most of the dominant Deep Learning frameworks are full C++ , with Python and bindings for other languages on top. So in practice, it's always compiled C++ running.

Học sâu trong pdf là gì?

Deep learning is a class of machine learning which performs much better on unstructured data . Deep learning techniques are outperforming current machine learning techniques. Nó cho phép các mô hình tính toán học dần dần các tính năng từ dữ liệu ở nhiều cấp độ.