Lập trình thuật toán là một việc đương nhiên tới mức tầm thường từ thủa sơ khai khi máy tính được tạo ra. Chúng ta đã quen với việc tạo ra các ứng dụng hay hệ thống bằng cách chia nhỏ các yêu cầu thành các bài toán con và từ những bài toán con này các đoạn code được viết ra. Các bài toán đơn vị chính là những bài toán điều kiện (if else), vòng lặp (while, for) hay tính toán cộng trừ nhân chia mà chúng ta hay triển khai khi lập trình.
Lấy ví dụ nếu chúng ta cần giải quyết bài toán tìm xu hướng của giá bitcoin, một trong số những hướng giải quyết có thể đưa ra tìm nguồn dữ liệu, tính toán chênh lệch giữa các ngày và kết luận xu hướng dựa trên các ngày gần đó. Một ví dụ khác nếu như bài toán đặt ra là lập trình trò chơi Balls Bricks Breaker. Dữ liệu ta có là vị trí của quả bóng, vị trí các viên gạch. Luật chơi là quả bóng được bắn lên, đập vỡ các viên gạch rồi quay ngược trở lại. Nếu quả bóng rơi xuống đáy người chơi có thể mất lượt.
Có một điểm chung của các bài toán ví dụ trên là chúng ta luôn phải xác định dữ liệu của bài toán, định nghĩa các luật để giải quyết bài toán và từ các luật và dữ liệu này câu trả lời hay các quyết định được đưa ra. Sơ đồ của quá trình này như ở hình (Hình 1). Các luật được cụ thể hoá bằng ngôn ngữ lập trình, dữ liệu có thể tới từ nhiều nguồn và cụ thể hoá thành các biến số trong chương trình hoặc lưu trữ trong các cơ sở dữ liệu.
Machine learning sắp xếp lại thứ tự của các thành phần một chút (Hình 2). Khi này dữ liệu và câu trả lời cần được xác định trước, các luật sẽ được đưa ra sau đó. Quay lại ví dụ trên, nếu ta có chuỗi các giá trị theo thời gian của bitcoin và nhãn xu hướng cho từng khoảng chuỗi giá trị đó, Machine learning sẽ giúp chúng ta đưa ra luật để xác định một khoảng chuỗi giá trị là tăng hay giảm. Cách làm này đặc biệt hữu ích để giải quyết những bài toán mà luật để giải quyết không rõ ràng.
Lấy ví dụ bài toán phát hiện loại chuyển động từ dữ liệu tốc độ. Nếu chỉ có các chuyển động chỉ là đi bộ, chạy hay đạp xe, chúng ta có thể định nghĩa một số luật để giải quyết. Nhưng nếu yêu cầu phân loại thêm loại chuyển động là đánh golf, đá bóng, hay chơi cầu lông chẳng hạn, số lượng luật đưa ra là quá nhiều và thực tế có thể không khả thi. Machine learning sẽ là vị cứu tinh trong những trường hợp như thế này. Việc thu thập dữ liệu và nhãn dữ liệu đơn giản hơn nhiều việc nghĩ ra thuật toán để giải quyết tất cả các trường hợp có thể xảy ra.
Nhìn vào hai biểu đồ, thực thế thì Machine learning và lập trình theo luật cũng khá giống nhau. Chỉ khác ở thứ tự các input và output. Một bên từ dữ liệu và thuật toán ta suy ra câu trả lời. Một bên từ dữ liệu và câu trả lời, thuật toán được sinh ra. Học máy là một mô hình lập trình mạnh mẽ và thú vị. Nó mở ra những khả năng mới mà lập trình theo luật trước đây không thể thực hiện được. Machine learning là mô hình lập trình kiểu mới, còn được ví như là
Sofware 2.0
Deep learning là một bài toán con của Machine learning. Neural network là một triển khai cụ thể của khái niệm Deep learning. Thực tế Neural network chỉ là một triển khai nâng cao hơn một chút so với Machine learning mà chúng ta vừa bàn. Điểm khác biệt cơ bản có thể được so sánh ở Hình 3. Đối với Machine learning, việc tìm ra đặc trưng của dữ liệu là phần của của con người, từ các đặc trưng của dữ liệu đó, các luật mới được đưa ra. Đối với Deep learning, các đặc trưng này được tự động được tìm ra trong quá trình tạo luật.
Việc trích chọn đặc trưng từ dữ liệu một cách thủ công tương đối khó và nhiều khi cần kiến thức chuyên sâu về miền lĩnh vực của dữ liệu đó. Lấy ví dụ bài toán phân biệt chó mèo. Nếu giải quyết bài toán với Machine learning, bước đầu tiên chúng ta phải làm là định nghĩa các đặc trưng và tìm các đặc trưng đó từ ảnh (có râu không, có tai không, có nhọn không,....). Rồi từ những đặc trưng đó sử dụng thuật toán phân loại của Machine learning để đưa ra luật nhận dạng. Còn đối với Deep learning, tất cả những thứ ta cần là ảnh đầu vào và nhãn của ảnh, không cần định nghĩa bất kỳ đặc trưng gì, các đặc trưng sẽ được tự động đưa ra. Hình 4.
Trong điều kiện dữ liệu nhiều, việc sử dụng deep learning để trích suất tự động các đặc trưng tỏ ra hiệu quả hơn đáng kể. Đương nhiên lựa chọn giải thuật nào nào cũng có ưu và nhược điểm một bên cần nhiều dữ liệu (Deep learning), một bên cần trích chọn đặc trưng cẩn thận (Machine learning).
Trong loạt bài này, vncoder.vn sẽ giúp các bạn tìm hiểu các ứng dụng của Deep learning để giải quyết những bài toán thực tế từ dữ liệu hình ảnh, ngôn ngữ tự nhiên,.... Các bạn sẽ có thể nắm được các khái niệm cơ bản và các bước sử dụng công cụ sau đó triển khai các mô hình Deep learning, nắm được cách phân tích và cải thiện hiệu năng của các mô hình. Cuối cùng đi tới triển khai các mô hình này vào sản phẩm thực tế. Mời các bạn theo dõi!