Tổng quan về Deep Learing với Tensorflow
Các kiểu học của trong machine learning ?
- Học được giám sát (Supervised learning) : dữ liệu được đưa vào là những dữ liệu có sẵn label (giá trị đầu ra hay là kết quả của một đối tượng dựa trên các đạc tính của đối tượng đó). Từ những label đó, áp dụng các mô hình để máy học và tiến hành dự đoán các label tương tự dựa trên các đặc tính của đối tượng trong dữ liệu.
- Học không giám sát (Unsupervised learning) : Dữ liệu được đưa vào là những dữ liệu không có cấu trúc hoặc cấu trúc không rõ ràng như hình ảnh, âm thanh, văn bản... và không có label. Khi đưa vào mô hình máy sẽ tiến hành học, tìm kiếm các đặc tính nào đó có chung giữa các đối tượng và nó sẽ cho ra kết luận dựa trên đặc tính chung đó.
- Semi-supervised Learning : Học bán giám sát là một cách tiếp cận học máy kết hợp một lượng nhỏ dữ liệu được gắn nhãn với một lượng lớn dữ liệu không được gắn nhãn trong quá trình học. Học bán giám sát nằm giữa học không giám sát và học được giám sát. Đây là một trường hợp đặc biệt của việc giám sát yếu kém.
- Transfer learning : Áp dụng mô hình đã được học trước và vận dụng những gì đã học được để giải quyết một vấn đề và áp dụng nó cho một vấn đề khác có liên quan. Ví dụ: kiến thức thu được khi học nhận dạng ô tô có thể áp dụng khi cố gắng nhận ra xe tải.
Deep learning là gì ?
Deep learning hay còn gọi là học sâu là một nhánh con của học máy (machine learning) trong trí lĩnh vực trí tuệ nhân tạo (Artificial Intelligence). Nó có một hệ thống mạng lưới có khả năng học không cần giám sát (unsupervied learning) từ những dữ liệu có cấu trúc cho đến dữ liệu không có cấu trúc hoặc có thể những dữ liệu đó có label hoặc không đủ label (label là output hay là kết quả có được từ các đặc tính trong dữ liệu hình thành nên. Ví dụ : một bệnh nhân bị các bệnh như cao huyết áp, mắc bệnh tim mạch, tiểu đường... sẽ là các đặc tính. Còn kết quả sẽ là CÓ hoặc KHÔNG có nguy cơ bị đột quỵ )
Deep learning hay kể cả Machine learning thực tế nó không hiểu được ngôn ngữ tự nhiên (ngôn ngữ giao tiếp hằng ngày) mà nó chỉ hiểu dữ liệu bằng các con số. Do đó, khi làm việc với Deep learning, ta cần phải chuyển tất cả dữ liệu về dạng số.
Deep learning nên được sử dụng cho :
- Giải quyết các vấn đề với danh sách dài các quy tắc : Khi cách tiếp cận truyền thống không hiệu quả, thì machine learning hay deep learning là sự lựa chọn hoàn hảo.
- Môi trường thay đổi liên tục: Deep learning có thể thích ứng với các tình huống mới
- Khám phá bên trong tập dữ liệu lớn
Deep learning không nên sử dụng cho :
- Khi cần giải thích ý nghĩa : các mẫu được học bởi mô hình học sâu thường không thể diễn giải được bởi con người.
- Khi phương thức truyền thống là sự lựa chọn tốt hơn
- Khi lỗi xảy ra không thể chấp nhận được : Vì không phải lúc nào giá trị xuarat ra trong deep learning cũng có khả năng dự đoán tốt.
- Khi dữ liệu không đủ : Mô hình deep learning yêu cầu dữ liệu khá lớn để nó có thể học được tốt.
Machine learning và Deep learning có gì khác ?
Machine learning | Deep learning | ||
---|---|---|---|
Dữ liệu có cấu trúc | Dữ liệu không có cấu trúc (hình ảnh, âm thanh, văn bản...) | ||
Random forest | Neural networks | ||
Naive Bayes | Fully connected neural network | ||
Nearest neighbour | Convolutional neural network | ||
Support vector machine | Recurrent neural network | ||
... | Transformer |
Neural Network là gì ?
Neural Network (Mạng nơ-ron) là một chuỗi các thuật toán cố gắng nhận ra các mối quan hệ cơ bản trong một tập hợp dữ liệu thông qua một quy trình bắt chước cách bộ não con người hoạt động. Theo nghĩa này, mạng nơ-ron đề cập đến hệ thống nơ-ron, có thể là hữu cơ hoặc nhân tạo trong tự nhiên.
Các bước thực hiện trong Neural network
Cách thức hoạt động bên trong neural network
TensorFlow là gì?
- TensorFlow là một mã nguồn mở được xây dựng dựa trên nền tảng của machine learning
- Viết Code Deep learning nhanh bằng Python hoặc các ngôn ngữ có thể truy cập khác( Có thể chạy trên GPU hoặc TPU)
- Có thể tiếp cận được nhiều mô hình deep learning đã được xây dựng trước đó(TensorFlow Hub)
- Đáp ứng đầy đủ stack : Xử lý dữ liệu -> Đưa dữ liệu vào mô hình -> deploy mô hình
- Trước khi trở thành mã nguồn mở,
Tensorflow
được Google sử dụng nội bộ
Tại sao nên sử dụng TensorFlow ?
Hiện nay ngoài TensorFlow
còn có một số tool mã nguồn phục vụ cho Deep learning như Pytorch, fast.ai ...
Nhưng TensorFlow vẫn có những ưu điểm nhất định như có cộng đồng rất lớn, được phát triển bởi Google một trong những tập đoàn AI lớn mạnh nhất trên Thế giới nên được phát triển và cập nhật liên tục, nó còn chứa rất nhiều phương thức được sử dụng rất phổ biến.
Những gì chúng ta sẽ cover
ensorFlow rất rộng lớn. Nhưng cốt lõi chính cũng khá đơn giản: biến dữ liệu thành số (tensors) và xây dựng các thuật toán học máy để tìm các mẫu trong đó..
Chúng ta đề cập đến một số hoạt động TensorFlow cơ bản nhất, cụ thể hơn:
- Giới thiệu về tensor (Cách tạo tensors)
- Sử dụng @tf.function (a way to speed up your regular Python functions)
- Sử dụng GPUs với TensorFlow
Những điều cần lưu ý:
- Nhiều quy tắc ở đây sẽ tự động diễn ra phía sau nó (khi bạn xây dựng một mô hình) nhưng bạn nên biết rằng nếu bạn nhận ra kỳ điều gì trong số này, bạn sẽ hiẻue điều gì đang xảy ra.
- Đối với bất kỳ hàm TensorFlow nào bạn thấy, điều quan trọng là có thể kiểm tra nó trong document, ví dụ: truy cập document API Python cho tất cả các hàm và tìm kiếm những gì bạn cần: https://www.tensorflow.org/api_docs/python/
Giới thiệu Tensors
Nếu bạn đã từng sử dụng NumPy, , tensors giống như mảng NumPy (chúng ta sẽ xem thêm về điều này sau)
Tensor là gì? Bạn có thể coi tensor là một ma trận đa chiều (còn được gọi là n-chiều, trong đó n có thể là bất kỳ số nào):
- Bản thân nó có thể là những con số (sử dụng tensors để đại diện cho giá của ngôi nhà).
- Đó có thể là hình ảnh (Dùng tensor để đại diện cho các pixels của một ảnh).
- Đó có thể là văn bản (Dùn tensors để đại diện cho các words).
- Hoặc nó có thể là một số dạng thông tin khác (hoặc data) mà bạn muốn đại diện bằng những con số
Sự khác biệt chính giữa các Tensor và mảng NumPy (cũng là một mảng số n chiều) là các tenxơ có thể được sử dụng trên GPUs (graphical processing units) và TPUs (tensor processing units).
Lợi ích của việc có thể chạy trên GPU và TPU là tính toán nhanh hơn, điều này có nghĩa là, nếu chúng ta muốn tìm các mẫu trong biểu diễn số của dữ liệu của mình, chúng ta thường có thể tìm thấy chúng nhanh hơn bằng cách sử dụng GPU và TPU
Điều đầu tiên cần làm là import TensorFlow dưới dạng tên viết tắt thông dụng là tf
.
# Import TensorFlow import tensorflow as tf print(tf.__version__) # find the version number (should be 2.x+)
Kiểm tra xem đã kết nối với GPUs hay chưa
Chúng ta đã đề cập đến GPU rất nhiều lần trong bài này. Vậy làm thế nào để kiểm tra xem máy đã kết nối với GPU hay chưa ?
Bạn có thể kiểm tra xem mình có quyền truy cập vào GPU hay không bằng cách sử dụngtf.config.list_physical_devices()
.
print(tf.config.list_physical_devices('GPU'))
result
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
Nếu ở trên xuất ra một mảng trống (hoặc không có gì), điều đó có nghĩa là bạn không có quyền truy cập vào GPU (hoặc ít nhất là TensorFlow không thể tìm thấy nó).
Nếu bạn đang chạy trong Google Colab, bạn có thể kết nối đến GPU bằng cách đi tới Runtime -> Change Runtime Type -> Select GPU (Lưu ý: sau khi làm điều này, sổ ghi chép của bạn sẽ khởi động lại và bất kỳ biến nào bạn đã lưu sẽ bị mất).
Khi bạn đã thay đổi loại thời gian chạy của mình, hãy chạy ô bên dưới.
import tensorflow as tf print(tf.config.list_physical_devices('GPU'))
result
# [out] [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
Nếu bạn có quyền truy cập vào GPU, ô ở trên sẽ xuất ra một cái gì đó như:
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
Bạn cũng có thể tìm thông tin về GPU của mình bằng cách sử dụng !nvidia-smi
.
!nvidia-smi
🔑 Lưu ý: Nếu bạn đã kết nối tới GPU, TensorFlow sẽ tự động sử dụng nó bất cứ khi nào có thể.