
Có 2 thứ bạn nên tiết kiệm, đó là sức khỏe và lời hứa.
Có 2 thứ bạn phải cho đi, đó là tri thức và lòng tốt.
Có 2 thứ bạn phải thay đổi, đó là bản thân và nhận thức.
Có 2 thứ bạn phải giữ gìn, đó là niềm tin và nhân cách.
Có 2 thứ bạn phải trân trọng, đó là gia đình và hiện tại.
Có 2 thứ bạn phải tự mình thực hiện, đó là lao động và chịu trách nhiệm với việc mình làm.
Có 2 thứ bạn phải lãng quên, đó là đau thương và hận thù.
Có 2 thứ bạn phải khắc ghi, là công ơn Mẹ Cha và sự giúp đỡ của người khác.
Có 2 thứ bạn buộc phải có để là người thành công, đó là đam mê và lòng kiên trì.
Có 2 thứ bạn không được làm, đó là hãm hại người khác và phản bội lòng tin.
Có 2 thứ bạn phải bảo vệ, đó là danh tín và lẽ phải.
Có 2 thứ bạn phải chấp nhận, là cái chết và sự khác biệt.
Có 2 thứ bạn phải kiểm soát, đó là bản năng và cảm xúc.
Có 2 thứ bạn phải tránh xa, đó là cám dỗ và sự ích kỷ.
Có 2 thứ bạn luôn phải sử dụng mà đừng hà tiện, là tiền bạc và kinh nghiệm.
Có 2 thứ bạn không được sợ sệt, là cái ác và sống thật.
Có 2 thứ bạn phải nuôi dưỡng, là tình yêu và sự bao dung.
Có 2 thứ mà bạn cần phải đạt được trong cuộc sống, đó là thành đạt và hạnh phúc.
Có 2 thứ bạn phải luôn sẵn sàng, đó là khó khăn và ngày mai.
Có 2 thứ bạn phải luôn ghi nhớ, đó là thực hiện những điều trên và làm thật tốt chúng trong cuộc sống hàng ngày.
— Thích Nhật Từ, khóa tu một Ngày An Lạc lần 4, chùa Giác Ngộ, ngày 19/06/2016
Có hai loại gradient descent, một loại với fixed learning rate được gọi là batch gradient descent, loại còn lại có learning rate thay đổi theo quá trình huấn luyện được gọi là SGD (stochastic gradient descent) hay minibatch gradient descent.
Em thấy đoạn này hình như có vấn đề vì em tưởng learning rate nó là do mình gán, chứ liên quan gì đến gradient descent ạ
ThíchThích
Gradient descent thuật toán có tham số alpha do mình tự gán để điều chỉnh trực tiếp tốc độ hội tụ của hàm tối ưu độ lỗi. Qua thực nghiệm, ta sẽ biết được tham số alpha nào thích hợp nhất đối với tập dữ liệu huấn luyện hiện tại của mình.
Em có thể tham khảo thêm bài viết này: http://sebastianraschka.com/faq/docs/closed-form-vs-gd.html
ThíchThích
Cảm ơn anh Hồng về blog rất hữu ích.
Chào bạn anhnamxtanh 🙂 mình thấy bạn đã hiểu sai về khái niệm BGD và SGD rồi.
– Đầu tiên, khái niệm Batch Gradient Descent tức là mỗi bước bạn sẽ tính vector gradient dựa vào toàn bộ tập dữ liệu bạn có. Còn stochastic gradient descent là một kĩ thuật mà mỗi bước đi bạn không phải dựa vào toàn bộ tập mà bạn chỉ dựa vào một phần thôi. Người ta gọi là stochastic vì nó có tính nhiễu loạn trong đó (nhiễu loạn ở đây chỉ giá trị hàm chi phí không phải luôn giảm mà có thể tăng, có thể giảm, tuy nhiên nhìn chung là nó sẽ giảm sau khi lặp qua nhiều bước). Tất nhiên ở đây vector gradient chỉ giảm khi trong khoảng xấp xỉ của khai triển Taylor lúc xấp xỉ đạo hàm.
-> Ý mình muốn nói là việc learning rate thay đổi không phải ý để nói về khái niệm BGD và SGD.
– Còn việc chọn learning rate thì có một số lưu ý như sau:
+ Learning rate sẽ làm ảnh hưởng đến giá trị chi phí như thế nào: Quá lớn thì sao? (giá trị hàm chi phí sẽ lên xuống không theo qui luật) Quá nhỏ thì sao? (có thể vài năm hoặc vài chục năm mới đạt được kết quả hội tụ).
+ Tại sao learning rate có thể thay đổi: Một rule of thumb trong việc chọn máy học hiệu quả như const/(số lần lặp)
ThíchThích
Em đã comment “vì em tưởng learning rate nó là do mình gán, chứ liên quan gì đến gradient descent ạ”
và anh cmt “Ý mình muốn nói là việc learning rate thay đổi không phải ý để nói về khái niệm BGD và SGD.” cũng gần như nhau mà
ThíchThích
À thành thật xin lỗi bạn. Mình tưởng câu: “Có hai loại gradient descent, một loại với fixed learning rate được gọi là batch gradient descent, loại còn lại có learning rate thay đổi theo quá trình huấn luyện được gọi là SGD (stochastic gradient descent) hay minibatch gradient descent. ” là bạn nói. Tại mình chưa đọc hết bài viết. Nhìn lên mới thấy câu này trong bài viết của anh ấy :). Mình xin xác nhận là bạn đã hiểu đúng.
Anh @ongxuanhong có lẽ đã hiểu nhầm khái niệm rồi 🙂
ThíchThích
Cảm ơn góp ý của em 🙂
ThíchĐã thích bởi 1 người
Cảm ơn góp ý của em 🙂
ThíchThích
Cám ơn anh vì những bài viết rất hữu ích, nhưng sao repo trên github không tồn tại anh ơi.
ThíchThích
anh lỡ tay xoá rồi em, em có thể copy các đoạn code trong bài viết và chạy lại xem sao 🙂
ThíchThích
Dạ, chúc anh sức khỏe, ra bài viết đều đều ^^!
ThíchThích
Anh oi, nho anh chi em cach chay demo voi. Em da setup het cac yeu cau can thiet nhung khong biet phai chay bat dau tu dau.
Cam on anh nhieu!
ThíchThích
Em tạo một file demo.py, sau đó chạy lệnh “python demo.py”
ThíchThích
Anh cho em hỏi, tham số “pred_func” truyền vào của hàm “plot_decision_boundary()” ở ví dụ Logistic Regression anh dùng là gì vậy ạ? Em không tìm thấy đoạn anh gọi hàm này ra. Em cảm ơn ạ!
ThíchThích
Ở mục “Chạy thực nghiệm” đó em
plot_decision_boundary(lambda x: predict(model, x))
ThíchThích
Dạ, em cám ơn ạ!
ThíchThích
Dạ, xin lỗi anh, tại em vẫn chưa hiểu. Lệnh ở mục chạy thực nghiệm là dành cho Neural Network chứ không phải cho Logistic Regression ạ. Em thử chạy rồi nhưng không được.
ThíchThích
Dành cho bạn nào mới tìm hiểu và có thắc mắc giống mình. Thêm đoạn code gọi hàm này sẽ chạy được:
# Train the logistic rgeression classifier
clf = sklearn.linear_model.LogisticRegressionCV()
clf.fit(X, y)
# Plot the decision boundary
plot_decision_boundary(lambda x: clf.predict(x))
plt.title(“Logistic Regression”)
ThíchThích
Chào anh, anh có thể chia sẽ kinh nghiệm chọn số hidden layer và số node trong mỗi layer được không ạ
ThíchThích
Nếu tập dữ liệu của bạn là khả phân (separateble – xem thêm VC dimension) thì bạn không cần hidden layer nào, thậm chí các thuật toán khác cũng có thể thực hiện công việc phân lớp rất tốt.
Thông thường để bắt đầu, bạn có thể chọn số hidden layer là 1, số lượng node là trung bình giữa input và output, nghĩa là n_hidden_node = |n_feature_input – k_feature_output|/2. Sau đó, tăng dần lên hoặc giảm xuống để theo dõi kết quả.
Hoặc bạn có thể sử dụng công thức sau:
N_h = N_s/ (alpha * (N_i + N_o).
N_i = số node input
N_o = số node output
N_s = số lượng mẫu training
alpha = hằng số bias (thường chọn từ 2 – 10)
Nguyên lý ở chỗ, số lượng node càng ít thì mô hình dễ bị underfitting, ngược lại sẽ bị overfitting và dữ liệu train của bạn không đủ để fitting kiến trúc này.
Ngoài ra, bạn có thể áp dụng nhiều phương pháp khác để tối ưu hoá mô hình: thử nghiệm các activate function khác nhau, dropout các node một cách ngẫu nhiên ở mỗi vòng lặp, hoặc kĩ thuật pruning neural network,…
ThíchThích
Cám ơn bài viết hữu ích của anh.
Cho em hỏi nếu số input node của em tăng là 4 và output node là 3 thì code có thay đổi gì khác ngoài việc khai báo số lượng mảng không?
ThíchThích
theo anh thấy thì code hiện tại có thể thay đổi n_input_node và n_output_node
ThíchThích
Nếu mình muốn làm hệ thống dự đoán khi nào mua/bán/hold stock dựa vào dữ liệu input là low price, high price, volume thì có dùng cách trên được ko anh?
ThíchThích
được em, tuy nhiên với chỉ 4 feature thì anh nghĩ là quá nhỏ để NN có thể predict chính xác. Em cần nhiều feature hơn ngoài low/high/volume có thể là moving average 10/12/26, score from news, financial balancing, fibonacci, etc.
ThíchThích
Vậy mình cần dùng nhiều indicators để làm input nodes phải ko anh? Anh có website nước ngoài hay ví dụ nào để tham khảo không?
ThíchThích
em có thể search từ khoá “deep leanring + stock prediction” ở google hoac google scholar. hoặc tham khảo một số link bên dưới nhé.
https://scholar.google.com.vn/scholar?hl=en&as_sdt=0%2C5&q=deep+learning+%2B+stock+prediction&btnG=
View at Medium.com
View at Medium.com
ngoài ra, em có thể tham khảo thêm Markov chain Monte Carlo simulation
https://blog.stata.com/2016/11/15/introduction-to-bayesian-statistics-part-2-mcmc-and-the-metropolis-hastings-algorithm/
ThíchThích