Tự học Tensorflow [P4] - Linear Regression with Tensorflow
2019, Mar 28
Ngoài những bài học lí thuyết từ phần trước Tự học Tensorflow [P3] - Dataset, Layer thì chúng ta cũng cần những giờ thực hành để ghi nhớ kiến thức, trong phạm vi bài viết này mình sẽ chia sẻ về cách giải quyết một bài toán Linear Regression đơn giản bằng Tensorflow. Nếu chưa theo dõi nhưng phần trước thì bạn có thể tham khảo thêm:
Linear Regression hay còn được gọi là Hồi Quy Tuyến Tính là một trong những thuật toán Supervised learning cơ bản của Machine Learning. Chắc hẳn khi học THCS hay THPT chúng ta đã khá quen thuộc với phương trình hàm số y = ax + b với x là biến số. Tuy nhiên ngược lại với bài toán này, ta coi a và b là biến số và tiến hành tìm a và b dựa trên tập x và y có sẵn. Bài toán này trong thực tế có khá nhiều, ví dự như khi ta muốn dự đoán số năm kinh nghiệm của một PHP Developer dựa trên số tuổi của lập trình viên đó trên tập dữ liệu của toàn bộ lập trình viên đã làm việc trước đó tại công ty.
ID
Age
Experience Years
0
22
1
1
25
3
2
27
2
3
25
4
Vậy công việc là với mỗi đầu vào là số tuổi của developer thì sẽ trả lại số năm kinh nghiệm dự đoán developer đó đã làm. Dĩ nhiên với loại bài toán này thì dữ liệu cũng tồn tại nhiễu ví dụ như developer - 2 với 27 tuổi nhưng số năm kinh nghiệm lại chỉ có 2.
Cách giải quyết bài toán
Công việc chúng ta cần làm ở đây là tìm mối liên hệ giữa độ tuổi và số năm kinh nghiệm của một Developer, mối quan hệ này được gọi là hypothesis, trong trường hợp này thì nó chính là một đường thẳng trong không gian 2 chiều.
(h(x) = wx+b)
Ở đây w là một vector Weights còn b là một scalar Bias. Chúng được coi là các parameters của một model.
Để có thể tìm được w và b thì chúng ta cần ước lượng giá trị của chúng dựa vào hàm chi phí Loss.
Hàm chi phí được dùng ở đây là hàm Mean Squared Error - Trung Bình Bình Phương Độ Lệch được tính bằng trung bình cộng của bình phương độ lệch trên mỗi điểm dữ liệu. Để tối ưu hàm này chúng ta sử dụng phương pháp Gradient Descent (GD) - một trong những phương pháp nền móng của Deep Learning. Với GD thì công việc của chúng ta là cập nhật lại giá trị của (\omega) và (b) dựa trên đạo hàm của hàm Loss.
(\alpha) ở đây cũng là một hyperparameter với tên gọi Learning rate.
Triển khai với Tensorflow
Với những bạn chưa biết Tensorflow là gì thì nên tham khảo bài viết Tự học Tensorflow [P1].
Chúng ta bắt đầu bằng việc khai báo những thư viện cần thiết
Để giữ nguyên giá trị random của Numpy và Tensorflow, chúng ta cố định seed.
Tiếp theo chúng ta khởi tạo dữ liệu và thêm nhiễu:
Data thu được:
Giờ chúng ta bắt đầu tạo model bằng cách sử dụng tf.placeholder cho ages và exp_year để có thể feed tập dữ liệu training vào optimizer trong suốt quá trình training.
Tiếp theo chúng ta khởi tạo 2 tf.Variable để lưu giá trị của Weights và Bias. Thông thường, chúng ta có thể khởi tạo Weights bằng cách sử dụng lớp tf.layers.Dense.
Khởi tạo giá trị learning rate cho optimizer và số lượng epochs:
Khởi tạo optimizer, operation tính giá trị loss:
Tensorflow có cung cấp hàm loss được xây dựng sẵn đó là tf.losses.mean_squared_error. Sau khi đã khởi tạo xong mọi thứ, tiến hành training và log lại thay đổi của Weights và Bias:
Kết quả sau 1000 epochs:
Model có vẻ chưa fit, training với 5000 epochs:
Training với 10000 epochs:
Như vậy mình vừa hướng dẫn các bạn giải một bài toán Linear Regression đơn giản bằng Tensorflow. Nếu bài viết có gì chưa đúng vui lòng comment dưới phần bình luận :D. Trong bài viết sau mình sẽ giới thiệu chi tiết về các thành phần khác như Loss, Optimizers.