Chào mừng bạn đến với "Xin chào, World" của máy học

1. Trước khi bắt đầu

Trong lớp học lập trình này, bạn sẽ tìm hiểu &cơ bản:Chào bạn!

Hãy cân nhắc vấn đề sau: Bạn đang xây dựng một hệ thống thực hiện việc nhận dạng hoạt động để theo dõi hoạt động thể dục. Bạn có thể truy cập vào tốc độ mà một người đang đi bộ và cố gắng suy luận hoạt động của họ dựa trên tốc độ đó bằng cách sử dụng điều kiện.

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

Bạn có thể mở rộng để chạy với điều kiện khác.

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

Trong điều kiện cuối cùng, bạn có thể phát hiện thấy hoạt động đạp xe tương tự.

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

Bây giờ, hãy xem xét điều gì sẽ xảy ra khi bạn muốn thêm một hoạt động, chẳng hạn như gôn. Cách tạo quy tắc để xác định hoạt động không rõ ràng.

fc772abb6fee2804.png

// Now what?

Việc viết chương trình nhận dạng hoạt động chơi gôn, vậy ông sẽ làm gì? Bạn có thể dùng công nghệ máy học để giải quyết vấn đề!

Điều kiện tiên quyết

Trước khi thử tham gia lớp học lập trình này, bạn sẽ cần:

  • Kiến thức vững chắc về Python
  • Kỹ năng lập trình cơ bản

Kiến thức bạn sẽ học được

  • Kiến thức cơ bản về công nghệ máy học

Sản phẩm bạn sẽ tạo ra

  • Mô hình máy học đầu tiên của bạn

Bạn cần có

Nếu chưa từng tạo mô hình máy học bằng TensorFlow, bạn có thể dùng Colaboratory, một môi trường dựa trên trình duyệt để chứa mọi phần phụ thuộc bắt buộc. Bạn có thể tìm thấy mã cho phần còn lại của lớp học lập trình chạy trong Colab.

Nếu bạn đang sử dụng IDE khác, hãy đảm bảo bạn đã cài đặt Python. Bạn cũng sẽ cần TensorFlow và thư viện NumPy. Bạn có thể tìm hiểu thêm và cài đặt TensorFlow tại đây. Cài đặt NumPy tại đây.

2. Máy học là gì?

Xem xét cách xây dựng ứng dụng truyền thống, như được trình bày trong sơ đồ sau:

c72f871306134e45.png

Bạn thể hiện quy tắc bằng ngôn ngữ lập trình. Họ dựa vào dữ liệu và chương trình của bạn cung cấp câu trả lời**.** Trong trường hợp phát hiện hoạt động, các quy tắc (mã bạn đã viết để xác định loại hoạt động) đã xử lý dữ liệu (tốc độ di chuyển của người đó) để tạo ra câu trả lời: giá trị trả về từ hàm xác định trạng thái hoạt động của người dùng (cho dù họ đang đi bộ, chạy, đi xe đạp hay làm việc khác).

Quá trình phát hiện trạng thái hoạt động qua máy học rất giống nhau, chỉ có các trục khác nhau.

9b85a337ee816e1b.png

Thay vì cố gắng xác định quy tắc và thể hiện chúng bằng ngôn ngữ lập trình, bạn cung cấp câu trả lời (thường được gọi là nhãn) cùng với dữ liệu và máy suy ra các quy tắc xác định mối quan hệ giữa câu trả lời và dữ liệu. Ví dụ: trường hợp phát hiện hoạt động của bạn có thể trông như sau trong bối cảnh máy học:

6ff58697a85931f4.png

Bạn thu thập nhiều dữ liệu và gắn nhãn dữ liệu một cách hiệu quả bằng cách nói: Sau đó, máy tính có thể dự đoán quy tắc xác định, từ dữ liệu, các mẫu riêng biệt nào biểu thị một hoạt động cụ thể là gì.

Ngoài việc là một phương pháp lập trình thay thế cho trường hợp đó, phương pháp đó cũng cho phép các bạn mở các tình huống mới, chẳng hạn như cách đánh gôn có thể không xảy ra theo phương pháp lập trình truyền thống dựa trên quy tắc.

Trong chương trình truyền thống, mã của bạn biên dịch thành tệp nhị phân thường được gọi là chương trình. Trong máy học, mục mà bạn tạo từ dữ liệu và nhãn được gọi là mô hình.

Vì vậy, nếu bạn quay lại sơ đồ này:

53ff9e2cb511936e.png

Hãy xem kết quả trong đó là mô hình, như sau:

693430bb4d7fa001.png

Bạn chuyển cho mô hình một số dữ liệu và mô hình này sử dụng các quy tắc mà mô hình suy luận được từ quá trình đào tạo để dự đoán, chẳng hạn như "

3. Tạo mô hình máy học đầu tiên của bạn

Hãy cân nhắc các bộ số sau. Bạn có thể thấy mối quan hệ giữa họ không?

X:

-1

0

1

2

3

4

Có:

-2

1

4

7

10

13

Khi xem xét các giá trị này, bạn có thể nhận thấy rằng giá trị của X đang tăng thêm 1 khi bạn đọc từ trái sang phải và giá trị tương ứng của Y đang tăng thêm 3. Bạn có thể nghĩ rằng Y bằng 3X cộng hoặc trừ một nội dung nào đó. Sau đó, bạn có thể nhìn thấy 0 trên X và thấy rằng Y là 1, và bạn & \u91d nghĩ ra mối quan hệ Y=3X+1.

Điều đó gần như chính xác cách bạn sử dụng mã để đào tạo một mô hình để phát hiện các mẫu trong dữ liệu!

Bây giờ, hãy xem mã để làm việc đó.

Làm thế nào để đào tạo một mạng nơ-ron để thực hiện tác vụ tương đương? Sử dụng dữ liệu! Bằng cách cung cấp dữ liệu này bằng một nhóm X\39 và một nhóm Y, bạn có thể tìm ra mối quan hệ giữa hai người này.

Nhập

Bắt đầu với quá trình nhập. Tại đây, bạn đang nhập TensorFlow và gọi phương thức này là tf để dễ sử dụng.

Tiếp theo, hãy nhập thư viện có tên là numpy. Thư viện này thể hiện dữ liệu của bạn dưới dạng danh sách một cách dễ dàng và nhanh chóng.

Khung để xác định mạng nơ-ron dưới dạng tập hợp các lớp tuần tự được gọi là keras, vì vậy, hãy nhập khẩu này.

import tensorflow as tf
import numpy as np
from tensorflow import keras

Xác định và biên dịch mạng nơ-ron

Tiếp theo, hãy tạo mạng nơ-ron đơn giản nhất có thể. Nó có một lớp, lớp đó có một nơron và hình dạng đầu vào của lớp đó chỉ là một giá trị.

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

Tiếp theo, viết mã để biên dịch mạng nơ-ron của bạn. Khi làm như vậy, bạn cần chỉ định hai hàm – a lossoptimizer.

Trong ví dụ này, bạn biết rằng mối quan hệ giữa các số là Y=3X+1.

Khi cố gắng tìm hiểu điều đó, máy tính sẽ đoán, có thể là Y=10X+10. Hàm loss đo lường các câu trả lời đã dự đoán so với các câu trả lời đúng đã biết và đo lường mức độ hiệu quả hoặc kém của câu trả lời đó.

Tiếp theo, mô hình sử dụng hàm optimizer để thực hiện một việc đoán khác. Dựa trên kết quả của hàm mất dữ liệu, hàm này cố gắng giảm thiểu tổn thất. Tại thời điểm này, có lẽ nó sẽ xuất hiện với nội dung như Y=5X+5. Mặc dù điều đó vẫn khá tệ, nhưng nó gần với kết quả chính xác hơn (sự mất mát thấp hơn).

Mô hình này lặp lại cho số epoch (thời gian bắt đầu) mà bạn sẽ sớm thấy.

Trước tiên, đây là cách yêu cầu trình duyệt sử dụng mean_squared_error để giảm tổn thất và độ dốc xuống ngẫu nhiên (sgd) đối với trình tối ưu hóa. Bạn chưa cần phải hiểu về toán học cho những thứ đó, nhưng bạn có thể thấy rằng chúng hoạt động!

Theo thời gian, bạn sẽ tìm hiểu các chức năng mất mát và tối ưu hóa phù hợp khác nhau cho các tình huống khác nhau.

model.compile(optimizer='sgd', loss='mean_squared_error')

Cung cấp dữ liệu

Tiếp theo, hãy cung cấp một số dữ liệu. Trong trường hợp này, bạn lấy 6 biến X và 6 biến Y ở phần trước. Bạn có thể thấy rằng mối quan hệ giữa những giá trị đó là Y=3X+1, do đó, trong X là -1, Y là -2.

Một thư viện python có tên là NumPy cung cấp nhiều cấu trúc dữ liệu loại mảng để thực hiện điều này. Chỉ định các giá trị dưới dạng một mảng trong NumPy bằng np.array[].

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

Bây giờ, bạn đã có tất cả mã cần thiết để xác định mạng nơ-ron. Bước tiếp theo là đào tạo để xem mô hình đó có thể dự đoán mẫu giữa các số đó hay không và dùng chúng để tạo mô hình.

4. Đào tạo mạng nơ-ron

Quá trình đào tạo mạng nơron, trong đó tìm hiểu mối quan hệ giữa X\39; và Y\39; đang tham gia cuộc gọi model.fit. Đó là nơi sẽ trải qua vòng lặp trước khi đoán, đo lường mức độ tốt hoặc kém (hoặc thua cuộc) hoặc sử dụng trình tối ưu hóa để đưa ra dự đoán khác. Thao tác này sẽ thực hiện việc đó đối với số liệu của hệ thống mà bạn chỉ định. Khi chạy mã đó, bạn sẽ thấy tổn thất sẽ được in ra cho từng kỷ nguyên.

model.fit(xs, ys, epochs=500)

Ví dụ: bạn có thể thấy rằng trong một số giai đoạn đầu tiên, giá trị thua cuộc khá lớn, nhưng nó sẽ nhỏ hơn với mỗi bước.

f110d5abed07c1b9.png

Trong quá trình đào tạo, các lỗ hổng sẽ sớm bị mất.

81ca5e71298b414b.png

Vào thời điểm đào tạo xong, tổn thất cực kỳ nhỏ, cho thấy rằng mô hình của chúng tôi đang làm rất tốt trong việc suy luận mối quan hệ giữa các số.

12b187014b639fd.png

Có thể bạn không cần tất cả 500 kỷ nguyên và có thể thử nghiệm với nhiều số tiền khác nhau. Như bạn có thể thấy trong ví dụ này, tổn thất thực sự rất nhỏ chỉ sau 50 kỷ nguyên, như vậy là đủ!

5. Sử dụng mô hình

Bạn có một mô hình đã được đào tạo để tìm hiểu mối quan hệ giữa X và Y. Bạn có thể sử dụng phương thức model.predict để tìm ra Y cho một X chưa xác định trước đó. Ví dụ: nếu X là 10, bạn nghĩ Y sẽ là gì? Hãy đoán trước khi bạn chạy mã sau:

print(model.predict([10.0]))

Có thể bạn đã nghĩ đến điều 31, nhưng cuối cùng thì hơi kết thúc. Vì sao?

Mạng nơron xử lý xác suất nên tính toán rằng xác suất mối quan hệ giữa X và Y là Y=3X+1 rất cao, nhưng không thể biết chắc chỉ có sáu điểm dữ liệu. Kết quả rất gần với 31, nhưng không nhất thiết phải là 31.

Khi làm việc với mạng nơ-ron, bạn sẽ thấy quy luật đó lặp lại. Bạn sẽ hầu như luôn xử lý xác suất, không phải xác định và sẽ thực hiện một chút mã hóa để xác định kết quả dựa trên xác suất, đặc biệt là khi phân loại.

6. Xin chúc mừng

Dù bạn có tin tưởng hay không, thì bạn đã thực hiện hầu hết các khái niệm trong công nghệ máy học mà bạn sẽ dùng trong những tình huống phức tạp hơn nhiều. Bạn đã học cách huấn luyện mạng nơron để phát hiện mối quan hệ giữa hai tập số bằng cách xác định mạng. Bạn đã xác định một tập hợp lớp (trong trường hợp này là chỉ một) chứa các nơ-ron (cũng trong trường hợp này chỉ có một lớp) mà sau đó bạn đã biên dịch bằng hàm mất và một trình tối ưu hóa.

Việc thu thập mạng, hàm thua cuộc và trình tối ưu hóa xử lý quá trình đoán mối quan hệ giữa các số, đo hiệu suất của chúng và sau đó tạo các tham số mới cho các dự đoán mới. Tìm hiểu thêm tại TensorFlow.org.

Tìm hiểu thêm

Để tìm hiểu về cách công nghệ máy học và TensorFlow có thể giúp bạn phát triển các mô hình thị giác máy tính, hãy tiếp tục tham khảo bài viết Xây dựng mô hình thị giác máy tính với TensorFlow.