Announcement

Collapse
No announcement yet.

Hỏi về MLP cho bộ dữ liệu MNIST

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hỏi về MLP cho bộ dữ liệu MNIST

    Chào mọi người,
    Hiện mình mới học về Machine Learning và đang học Multi-Layer-Peceptron(MLP).
    Sau khi học xong, mình định ứng dụng MLP vào bài toán phân loại số với bộ dữ liệu MNIST.

    Tuy nhiên kết quả là máy vẫn không học được. Theo mình quan sát, sau khi chạy qua mỗi batch và mỗi epoch thì các bias cứ tăng mãi không chịu dừng cho đến inf. Mình không hiểu lý do gì khiến các bias và hơn nữa là hàm mất mát không hội tụ.

    Mô tả cơ bản về thuật toán của mình:
    + MLP gồm 1 hidden layer với 500 units
    + activation funtion cho hidden layer là hàm ReLU, cho output layer là softmax
    + Sử dụng mini-batch gradient descent để tìm nghiệm. Số lần lặp (epoch) là 100 lần. Mỗi batch chứa 50 điểm dữ liệu

    Có đính kèm code bằng python của mình (gần 90 dòng).
    Bộ dữ liệu MNIST: http://yann.lecun.com/exdb/mnist/
    Các phần về tính toán đạo hàm mình tham khảo theo trang web : https://machinelearningcoban.com/2017/02/24/mlp/

    Mong mọi người giúp mình tìm ra vấn đề trong quá trình tính toán và code của mình.
    Attached Files

  • #2
    Đọc qua code thì anh thấy vài vấn đề như sau:
    - Hàm softmax code sai(có vẻ là nguyên nhân chính gây tràn số).
    - Learning rate 0.1 hơi lớn cho gradient descent, đôi khi có thể làm gradient exploding hoặc mô hình không hội tụ. Thường em nên thử trong khoảng 1e-2 đến 1e-5. Còn nếu em ngại chỉnh learning rate thì có thể thử các thuật toán adaptive learning rate.
    - 1000 ví dụ là hơi nhỏ cho bài toán nhận dạng chữ số.
    - Một phần quan trọng là với bài toán phân lớp thì người ta thường dùng các hàm lỗi như binary/categorical cross entropy hay log loss vì output của nó sẽ tiến tới vô cực khi dự đoán gần như khác hoàn toàn label(ví dụ label 0 mà đoán 1). Hàm MSE em dùng(dựa theo cách em tính E2 / nBatch) thường không hiểu quả trong dạng bài toán này vì giá trị lỗi của nó khá thấp trong trường hợp đã nêu trên. Trong bài toán của em có thể sẽ ra kết quả chấp nhận được nhưng tổng quan thì ko nên dùng MSE cho phân lớp.

    Nếu máy em chạy lâu thì em nên thử google colab.

    Comment


    • #3
      Originally posted by 14520031 View Post
      Đọc qua code thì anh thấy vài vấn đề như sau:
      - Hàm softmax code sai(có vẻ là nguyên nhân chính gây tràn số).
      - Learning rate 0.1 hơi lớn cho gradient descent, đôi khi có thể làm gradient exploding hoặc mô hình không hội tụ. Thường em nên thử trong khoảng 1e-2 đến 1e-5. Còn nếu em ngại chỉnh learning rate thì có thể thử các thuật toán adaptive learning rate.
      - 1000 ví dụ là hơi nhỏ cho bài toán nhận dạng chữ số.
      - Một phần quan trọng là với bài toán phân lớp thì người ta thường dùng các hàm lỗi như binary/categorical cross entropy hay log loss vì output của nó sẽ tiến tới vô cực khi dự đoán gần như khác hoàn toàn label(ví dụ label 0 mà đoán 1). Hàm MSE em dùng(dựa theo cách em tính E2 / nBatch) thường không hiểu quả trong dạng bài toán này vì giá trị lỗi của nó khá thấp trong trường hợp đã nêu trên. Trong bài toán của em có thể sẽ ra kết quả chấp nhận được nhưng tổng quan thì ko nên dùng MSE cho phân lớp.

      Nếu máy em chạy lâu thì em nên thử google colab.
      Đúng là có 2 vấn đề như anh đề cập là hàm softmax sai và learning rate quá lớn. Em đã sửa và kết quả cũng chấp nhận được. Vì chưa phải làm nghiêm túc nên em không quá quan trọng vào kết quả. Em sẽ thử thêm những loss function khác mà anh gợi ý. Em cảm ơn anh
      Last edited by 17520074; 17-10-2018, 10:29.

      Comment

      LHQC

      Collapse
      Working...
      X