Cách chọn Neural network hyperparameters
Mình thấy việc lựa chọn hyperparameters cho DNN là công việc khá nhạt nhẽo và đòi hỏi khá nhiều công sức. Lý do cũng như bạn nói và hiện tại cũng không có một phương pháp cụ thể nào có thể áp dụng cho tất cả các bài toán (theo mình nghĩ vậy)
Thông thường NN sẽ có khá khá hyperparameters cũng như việc xây dựng NN là khá mềm dẻo (nhiều loại network topology - cách mà các artificial neurons liên kết với nhau). Ví dụ như khi sử dụng MLP (Multi-Layer Perceptron) có khá nhiều hyperparameter mình cần quan tâm như: số lượng hidden layers, weight initialization technique, số lượng neurons cho một layer, loại activation function (logistic, ReLU, tanh),...
Sử dụng Grid Search và Cross-validation có lẽ là phương pháp quen thuộc nhất khi đi tìm hyperparameter set, và nó cũng hoạt động khá hiệu quả trong nhiều bài toán. Tuy nhiên với những bài toán có lượng dữ liệu lớn hoặc có quá nhiều hyperparameters như NN chẳng hạn, phương pháp này khá chậm. Để tìm được hyperparameter set tốt nhất trong hyperparameter space với một khoảng thời gian chấp nhận được không phải là việc đơn giản. Bạn có thể sử dụng Randomized Search hay công cụ http://oscar.calldesk.ai (mình chưa thử nó bao giờ, google thấy cái tool này hay hay ).
Số lượng Hidden Layers
Trên thực tế NN với 1 hidden layer (shallow net) có thể được sử dụng để mô tả những hàm khá phức tạp nếu có đủ số lượng neurons Nếu bài toán không quá phức tạp thì mình có thể thử nghiệm với NN với 1 hidden layer trước xem nó ra kết quả tốt không. Sau đó có thể add thêm hidden layer nếu cần thiết. Vậy thì mình cần gì đến DNN Trên thực tế DNN có thể cho ra kết quả tốt với số lượng neuron cho mỗi layer giảm đi đáng kể so với shallow net, từ đó giúp cho việc training nhanh hơn đáng kể.
- Thử với 1 hoặc 2 hidden layer và kiểm tra kết quả xem đã như mình mong muốn !?
- Tăng số lượng hidden layer lên cho đến khi overfit tập training.
Số lượng Neurons cho một Hidden Layer
Đối với input và output layer thì số lượng neurons sẽ phụ thuộc vào loại input và output cần thiết của bài toán. Ví dụ bài toàn cổ điển phân loại digit (MNIST dataset), số lượng input neuron có thể là 784 (28*28) và 10 neuron cho output (do phân loại 10 chữ số từ 0 đến 9). Do vậy mình chỉ cần quan tấm đến số lượng neuron cho hidden layer.
- Tương tự như số lượng hidden layer, mình có thể tăng số lượng neurons cho các hidden layer cho đến khi overfit tập training.
- Ngược lại với cách đầu tiên, mình có thể bắt đầu với một DNN với số lượng layer và lượng neurons nhiều hơn cần thiết, sau đó sử dụng một số kĩ thuật như early stopping, regularization (l1, l2, max-norm) hay dropout để tránh model bị overfitting
Activation Function
Trong nhiều trường hợp ReLU (và các biến thể của nó) có thể là lựa chọn khá tốt cho các hidden layer vì việc tính toán là khá nhanh.
Đối với output layer, softmax có lẽ là lựa chọn tốt cho các bài toán classification, còn với các bài toán regression thì không cần activation function cho output layer.
Mình có tham khảo thêm một số nguồn thì thấy có một configuration sau (performance khá tốt trong nhiều trường hợp)
- Initialization: He initialization (tránh các vấn đề liên quan đến vanishing/exploding graidents khi bắt đầu training)
- Activation function: ELU (có performance tốt hơn ReLU trong khá nhiều trường hợp), Sigmoid hoặc Tanh cho các bài toán classification (các giá trị có thể được đẩy về [0, 1]).
- Regularization: Dropout
- Normalization: Batch Normalization (tránh các vấn đề liên quan đến vanishing/exploding graidents trong quá trình training)
- Optimizer: Nesterov Accelerated Gradient !?
- Learning rate schedule: không
Đây là một số suy nghĩ của mình, chắc vẫn còn thiếu nhiều nhưng mong giúp giải quyết câu hỏi này một phần nào đó.
[Laravel] test database - DatabaseMigrations 🆘
Nếu bạn upgrade lên Laravel 5.5 (sẽ được ra mắt trong Laracon EU sắp tới !?) thì bạn có thể dùng RefreshDatabase
thay vì DatabaseMigrations
hay DatabaseTransactions
. Nó sẽ check database driver hiện tại và quyết định sử dụng transaction hay không. Mình thấy nên default về transaction (nếu driver có support), còn chỉ sử dụng migration trong trường hợp driver khá đơn giản như :memory:
hay sqlite
Laravel Learning Resources
Ngoài những nguồn như anh Thắng đã liệt kê (khá đầy đủ rồi) mình bổ sung một số nguồn sau nhé, chắc có thể giúp ích cho bạn.
-
Podcast:
- Laracasts Snippets: https://laracasts.com/podcast - nghe founder của Laracasts chém gió nhưng cũng có khá nhiều bài học thú vị.
- Laravel Podcast: http://www.laravelpodcast.com - bàn luận về khá nhiều chủ đề nhưng thời lượng khá dài nên nếu có thời gian rảnh thì bạn nên nghe.
- Laravel News Podcast: https://laravel-news.com/podcast - tương tự như Laravel Podcast.
- PHP Roundtable: https://www.phproundtable.com
-
Forum & Blog:
- Taylor Otwell on Medium: https://medium.com/@taylorotwell
- Mohamed Said on Medium: https://medium.com/@themsaid
- Adam Wathan: https://adamwathan.me
-
Conferences:
- Laracon US 2017: https://streamacon.com/video/laracon-us-2017
- Laracon Online: https://laracon.net
Responsive web
Bạn có thể đọc và tham khảo từ những bài viết này nhé: https://developers.google.com/web/fundamentals/design-and-ui/responsive
Tổ chức
Chưa có tổ chức nào.