[01/04/2019 12:12] [Hiểu sao cho đúng về minibatch, epoch] Chào mọi người. Em . . . Facebook-Groupsystem 2019-01-04 05:12:45 UTC #1 Nguồn post: https://www.facebook.com/257768141347267_614113729046038 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 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.
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. 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 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 |