Minibatch là gì

Minibatch là gì

[01/04/2019 12:12] [Hiểu sao cho đúng về minibatch, epoch] Chào mọi người. Em . . .       Facebook-Group


system             2019-01-04 05:12:45 UTC                 #1

Nguồn post: https://www.facebook.com/257768141347267_614113729046038
[Hiểu sao cho đúng về minibatch, epoch] Chào mọi người. Em đã tham khảo nhiều tài liệu nhưng vẫn còn khá mông lung về các khái niệm này, mong mọi người xem hộ em cách em hiểu như thế này đã đúng chưa ạ?

Giả sử trong training set của em có N=10 điểm dữ liệu (x1,y1), (x2,y2),, (x10, y10), loss function của em chọn MSE.

Nếu train theo cả batch thì mỗi bước gradient sẽ dùng cả 10 điểm dữ liệu để tính toán đúng ko ạ?

Nếu chọn batch_size = B = 3, nghĩa là mỗi bước gradient sẽ chọn ra 3 điểm dữ liệu bất kì để tính toán. Em muốn hỏi là ví dụ lần 1 sampling chọn ra 3 điểm (x1,y1), (x2,y2), (x3, y3) thì đến bước tiếp có chọn tiếp 3 điểm này ko hay sẽ sampling lại 3 điểm dữ liệu khác?

Các tài liệu có nói là số vòng lặp để thuật toán hội tụ sẽ bằng n=N/B nên em rất thắc mắc không hiểu số vòng lặp để thuật toán hội tụ thì liên quan gì đến N và B. Ví dụ trên em chọn N=10, B=3 thì chẳng lẽ n=3.33?

Các tài liệu có nói sau n vòng lặp thuật toán hội tụ sẽ tạo thành 1 epoch. Vậy sao cần nhiều epoch, nghĩa là train đi train lại 1 thuật toán để làm gì ạ?

Nếu em hỏi có gì ngô nghê mong mọi người bỏ qua ạ. Và cũng mong được giải thích dựa trên ví dụ cụ thể vì em cũng đọc nhiều giải thích chung chung mà ko có hiểu

Minibatch là gì

system             2019-01-04 05:31:14 UTC                 #2

Một epoch là một lần dùng hết training set để train. Batch size là số lượng data point cho vào model để nó học trong 1 lần. Một epoch cần nhiều batch. trong 1 epoch, data trong trong mỗi batch và giữa các batch khác nhau.


system             2019-01-04 05:46:27 UTC                 #3

Về mặt lý thuyết 1 epoch là 1 lần train qua hết training dataset để có 1 gradient descent step cho toàn tập dữ liệu vì thế nhiều epoch tức nhiều GD step xuống điểm cực tiểu Trên thực tế nếu 1 tập training set quá lớn 1epoch cần rất nhiều thời gian tính toán nên ng ta phải chia 1 epoch( tòa bộ traing set) thành những batchs nhỏ để tính toán tốc độ nhanh hơn.Ưu điểm tính toán nhanh.Khuyết điểm: độ lệch lớn nên cần nhiều  batchs hơn để đi đến điểm cực tiểu E nghĩ chị nên tìm hiểu về GD để biết thêm thông tin


system             2019-01-04 06:51:31 UTC                 #4

Theo mình hiểu thì như thế này.

  1. Batch (mẻ, đợt). Nếu không dùng batch thì xem như dùng tất cả N=10 điểm (mẫu = sample) dữ liệu để tính toán mỗi lần iteration.
  2. Nếu batch size B=3, mỗi iteration sẽ chọn 3 sample ngẫu nhiên trong 10 sample. Trong quá trình iteration, có thể sample lần sau sẽ trùng sample lần trước.
  3. Số vòng lặp là do người viết quy định, có thể lấy n=N/B. Hoăc n > N/B, và tùy bài toán. Và chắc chắn là số vòng iteration là 1 số nguyên, nên ko có giá trị 3.33,
  4. 1 epoch có nghĩa là tổng số sample đã lấy bằng với size của data đầu vào. Ở trường hợp của ban, N=10, chỉ cần 3 lần iteration thì số sample (3x3=9) lấy đã xấp xỉ tổng số mẫu ( N ), được xem như 1 epoch (Nói cách khác, 1 epoch sẽ có 3 lần iteration). Vậy có thể hiểu epoch là cách thể hiện đơn giản hóa khi vẽ đồ thị thay cho số iteration, vì số iteration thường rất lớn. Cuối cùng vì sao cần nhiều epoch. Giống như vì sao phải training, Network cần nhiều iteration, nhiều sample khác nhau đầu vào để có thể optimize system of weights. Nên việc cần nhiều epoch là tất yếu. 1 ví dụ đơn giản là trong quá trình chọn sample ngẫu nhiên (Bacth), có thể nhiều sample đã được dùng rất nhiều và có những sample chưa được dùng. Nên iteration là cần thiết để optimize network performance.

system             2019-01-04 12:24:13 UTC                 #5

Đúng, cái này gọi là batch GD. Nguyên thủy phải là như vậy vì hàm loss là hàm tính trên toàn bộ dữ liệu. Khi bạn tính với cả epoch thì chính là hàm loss toàn phần, và nhiệm vụ cần giảm dần hàm loss này nên cứ tính đi tính lại nhiều epoche, epoche sau dùng tham số đã tìm được từ epoche trước.

Cái này còn gọi là mini-batch GD. Chia nhỏ batch toàn  bộ dữ liệu (còn gọi là epoche) ra thành các phần là mini-batch. Chia nhỏ ra thì tính nhanh hơn, nhưng vẫn hội tụ được thì cũng hơi tài.

Minibatch là gì

Có lẽ nó đến từ lí do hàm loss toàn bộ chính là tổng của mất mát từng phần dữ liệu riêng rẽ.  Vì thế nên thường 3 điểm lần tiếp sẽ không trùng. Nếu chọn có trùng thì cũng vẫn được nhưng có thể sẽ lâu hội tụ hơn do làm cho sự ảnh hưởng mỗi điểm dữ liệu lên hàm loss không còn công bằng dù là chọn ngẫu nhiên.

Để thuật toán hội tụ thực ra cần vô hạn vòng lặp

Minibatch là gì

Tuy nhiên thực nghiệm thì chỉ cần hàm loss rất gần cực tiểu là được. Và kinh nghiệm chỉ ra cần một số vòng lặp nhưng không phải N/B. N/B là số vòng lặp trung bình để hoàn thành 1 epoch (3.33 là trung bình), trường hợp lẻ thế này thì hiểu là 4 vòng lặp, trong đó mini-batch thứ tư có size là 1, hoặc thích thì lấy thêm hai ông đã dùng cho nó vẫn là 3 đi chả sao cả :)). Còn để hội tụ cần một số lần lặp epoche.

Cái này sai. Sau n=N/B vòng lặp sẽ hoàn thành 1 epoch như nói ở 3 nhưng không đảm bảo hội tụ. Cần nhiều epoch thực chất là cần nhiều vòng lặp hơn để đảm bảo hàm loss giảm dần và hội tụ. Về mặt toán học mỗi lần bạn tính một epoch thì sử dụng tham số đã tối ưu ở epoche trước đó nghĩa là đang làm các bước giúp liên tục tìm bộ tham số mới giúp hàm loss giảm dần về cực tiểu. Tính trên 1 epoche giống như tính cho hàm loss toàn phần, tính trên mỗi batch chỉ giống như tính cho một phần của hàm loss. Đây không phải là train đi train lại mà là tính đi tính lại hàm loss và đạo hàm của nó ở các bộ tham số khác nhau với xu hướng các bộ tham số này tạo thành dãy hội tụ về bộ tham số tối ưu Bộ dữ liệu và hàm loss là không thay đổi, chỉ thay đổi điểm tính là bộ tham số.

Bạn tưởng tượng hàm loss là L(X,w), X là epoch dữ liệu, còn w là tham số. Ở epoch 1, sau n=N/B vòng lặp bạn được dãy bộ tham số w11=w0 khởi tạo, w12,,w1n, sau đó lại tính cho epoch 2, được dãy bộ tham số w21=w1n, w22, w23,,w2n,càng nhiều epoch càng thu được dãy tham số dài ra và nó là dãy hội tụ về w_good cần tìm. Chú ý là khi bạn đang có bộ tham số w_a nào đó, muốn có bộ tham số tiếp theo tốt hơn là w_b thì cần tính L(X, w_a) và đạo hàm (dL/dw)(X,w_a), lúc nào cũng là dùng epoch dữ liệu train X thôi.


Trang chủ Chuyên mục FAQ/Hướng dẫn Điều khoản Dịch vụ Chính sách Riêng tư

Powered by Discourse, best viewed with JavaScript enabled