Bài đăng

Đang hiển thị bài đăng từ Tháng 6, 2019

Phép phân tích ma trận A=LU

Phép phân tích ma trận (hay Matrix Decomposition) là một phương pháp nhân tử hóa ma trận bằng cách tách ma trận đó ra thành phép nhân của nhiều ma trận khác nhau. Cũng giống như với một số tự nhiên, ta có thể tách số đó ra thành các nhân tử khác nhau như tách ra thành các thừa số nguyên tố để dễ dàng nhận biết được đặc điểm của con số ấy. Thì nhân tử hóa ma trận cũng được xây trên khái niệm tương tự. Phép phân tích ma trận đơn giản nhất là A = L U A=LU . Trong đó: A A là một ma trận bất kỳ. L L là ma trận tam giác dưới. (L là viết tắt của Lower trong Lower Triangle). U U là ma trận tam giác trên. (U là viết tắt của Upper trong Upper Triangle). A = L U A = LU Phép phân tích ma trận này rất đơn giản, đầu tiên ta thực hiện các phép biến đổi trên dòng để đưa A thành một ma trận bậc thang. Lúc đó, ma trận bậc thang chính là U. Tôi sẽ lấy một ma trận có kích thước 3x3 để làm ví dụ. A = [ 1 5 2 3 6 4 − 2 2 7 ] A = \begin{bmatrix} 1 & 5 & 2 \\ 3 & 6 & 4 \\ -2 &a

The Outliers: Các thiên tài có những gì?

Hình ảnh
Thật ra, tôi đã hoàn thành cuốn sách "The outliers" (Bản dịch lại có tên là "Những kẻ xuất chúng") của Malcolm Gladwell lâu rồi nhưng đến bây giờ tôi mới có thời gian để nhìn lại những gì nó đã mang đến cho tôi. "The outliers" không phủ nhận đã nhận được nhiều ý kiến tích cực từ phía đọc giả. Các blogger và các vlogger nhận xét rằng đây là một trong những cuốn sách đáng đọc và đã gây tác động lớn đến họ. Vậy tại sao "The outliers: The story of success" lại thành công đến như vậy? Suy nghĩ đầu tiên của tôi khi gặp cuốn này chính là sự khinh thường. Chính cái tên "Những kẻ xuất chúng" và lời giới thiệu trên trang bìa tạo cho tôi một chút gì đó khó chịu khi đọc nó. "Tại sao tôi lại phải biết những kẻ khác có gì để khiến họ xuất chúng chứ?" - là câu hỏi mà tôi đã đặt ra khi đọc hết phần giới thiệu. Tôi biết tôi khó chịu vì điều gì, tôi sợ rằng cuốn sách có thể nêu lên những đặc điểm, điều kiện và tố chất mà những kẻ xuất chú

[Nhập môn Machine Learning] Bài 6: Overshooting và thuật toán Gradient Descent cho hàm nhiều biến

Hình ảnh
Overshooting Ở bài trước, tôi có đề cập đến tham số α \alpha . Đây là tham số giúp ta điều chỉnh độ lớn của đạo hàm hay còn gọi là tham số learning rate trong Gradient Descent. Trong thực tế, không phải lúc nào nâng cấp các trọng số θ \theta theo độ lớn của đạo hàm cũng đưa chúng ta đến cực tiểu của hàm số. Nếu Cost Function của chúng ta quá hẹp, dẫn đến đạo hàm quá lớn sẽ khiến Gradient Descent đưa chúng ta rời xa cực tiểu. Hiện tượng này gọi là overshooting . Bạn có thể tự kiểm chứng bằng cách tăng α \alpha lên một giá trị lớn (khoảng 2 hoặc 3) và bạn sẽ thấy cả Cost Function dần tiến ra vô cực. Đó cũng là cách nhận biết khi nào bạn đang gặp overshooting. Vậy nên sẽ là tốt nếu chỉ lấy một phần độ lớn này thôi và chúng ta sẽ điều khiển việc này bằng tham số α \alpha . Từ bây giờ, Gradient Descent của chúng ta sẽ có dạng: θ = θ − α d d θ J ( θ ) \theta = \theta - \alpha \frac{d}{d\theta} J(\theta) Tuy nhiên, không phải vì thế mà lúc nào chúng ta cũng phải để learning

Có lẽ chúng ta nên thôi học toán theo sai cách

Hình ảnh
Giáo sư Gilbert Strang trong một bài giảng của ông Tôi vừa kết thúc học phần Đại số tuyến tính của mình ở trường xong và tôi chỉ có thể thốt lên hai từ "Thảm họa". Các bài giảng và slide đều chằng chịt những định lý, hệ quả và công thức. Tôi dường như không biết mình học môn này để làm gì. Đó là nếu như tôi không học trước một khóa khác trên OCW (MIT Open Courseware). Định lý, hệ quả và công thức sẽ không nằm trong đầu bạn lâu đâu Hãy nhớ lại một trong những tiết toán của bạn. Tôi nghĩ chúng sẽ có kịch bản như thế này. Giáo viên vào lớp và hất vô mặt bạn một tràng công thức và định lý. Bạn hoang mang không biết chúng từ đâu ra. Giáo viên bắt đầu làm những bài mẫu. Bạn bắt đầu nhìn theo công thức và lối mòn mà giáo viên đã bày ra. Bạn biết làm bài tập thuộc dạng này. Nhưng bạn không biết tại sao mình phải làm vậy. Tôi nghĩ là đa số các lớp toán của tôi đều theo trình tự như vậy. Những gì tôi cần làm là phát hiện dạng bài, ráp công thức và xong. Phương pháp dạ

Sai lầm khi thao tác với tham số con trỏ trong C++ của mình

Hình ảnh
Thời gian gần đây mình có làm việc với C++ trong một dự án nhỏ của mình và mình đã gặp một lỗi rất ngớ ngẩn trong khi làm việc với con trỏ. Cho đoạn chương trình sau đây # include <iostream> void sayHello ( const char * c ) { c = "Hello World" ; std : : cout << "String change to:" << std : : endl ; std : : cout << c << std : : endl ; } int main ( ) { const char * charArray = "This is a string" ; std : : cout << "Before:" << std : : endl ; std : : cout << charArray << std : : endl ; sayHello ( charArray ) ; std : : cout << "After:" << std : : endl ; std : : cout << charArray << std : : endl ; return 0 ; } Các bạn có thể tự chạy thử chương trình trên. Kết quả của các bạn là gì? Còn đây là của mình: Lúc này, mình nghĩ trong đầu các bạn sẽ có 2 câu hỏi: Ơ, thế quái nào mà lại có thể gán co