Bias trong thống kê là gì

Bài này mình tổng hợp một số kĩ thuật để train model tốt hơn, cũng như một số khái niệm bạn sẽ gặp khi làm việc với deep learning. Đầu tiên mình nói về tầm quan trọng của vectorization, tiếp mình sẽ nói về kĩ thuật mini-batch gradient descent với lượng dữ liệu lớn. Sau đó mình nói về bias, variance, cách đánh giá bias-variance trong model và một số biện pháp để giải quyết vấn đề high bias, high variance. Mình có giải thích về kĩ thuật dropout để tránh overfitting. Phần cuối mình nói về vanishing và exploding gradient, cũng như giới thiệu một số hàm activation function phổ biến và cách chọn hàm activation.Bạn đang xem: Bias trong thống kê là gì

Nội dung

Mini-batch gradient descent Bias và varianceDropoutActivation function

Vectorization

Ngay từ bài đầu tiên về linear regression, mình đã giới thiệu về việc biểu diễn và tính toán dưới dạng vector. Việc biểu diễn bài toán dưới dạng vector như vậy gọi là vectorization. Nó không chỉ giúp code gọn lại mà còn tăng tốc độ tính đoán một cách đáng kể khi thực hiện các phép tính trên vector, ma trận so với for-loop.

Bạn đang xem: Bias trong thống kê là gì

View the code on Gist.

Bạn sẽ thấy nếu dùng for-loop mất hơn 4s để nhân 2 vector trong khi dùng thư viện numpy để tính chỉ mất 0.01s. Tại sao lại như thế nhỉ?

Giả sử bạn có 10 tấn hàng cần vận chuyển từ A đến B và bạn có một xe tải với khả năng chở được 5 tấn mỗi lần. Vậy nếu chất đầy hàng mỗi lần chở thì chỉ cần 2 lần chạy là chuyển hết số hàng. Tuy nhiên nếu mỗi lần bạn chỉ chất 1 tấn hàng lên xe để chở đi thì xe cần đi tới 10 lần để chuyển hết số hàng.

Xem thêm:   Pin Lithium Là Gì ? Cấu Tạo Và Nguyên Lý Hoạt Động Của Pin Lithium

Tương tự như vậy, khi nhân 2 vector ở trên bạn cần thực hiện 10000000 phép tính nhân 2 số. Giả sử máy tính có thể tính được tối đa 1000 phép tính nhân một lúc. Việc bạn dùng for-loop giống như mỗi thời điểm bạn chỉ yêu cầu máy tính thực hiện một phép nhân, nên để nhân 2 vector sẽ cần 10000000 đơn vị thời gian. Tuy nhiên thư viện numpy sẽ tối ưu việc tính toán bằng cách yêu cầu máy tính thực hiện 1000 phép tính một lúc, tức là chỉ cần displaystylefrac{10000000}{1000} = 10000 đơn vị thời gian để hoàn thành phép nhân 2 vector. Vậy nên là việc vectorization thông thường sẽ tính toán nhanh hơn.

Mini-batch gradient descent

Mini-batch gradient descent là gì

Ở trong thuật toán gradient descent, tại bước thứ hai khi ta tính đạo hàm của loss function với các biến. Trong bài linear regression, ta dùng tất cả các dữ liệu trong dataset để tính đạo hàm rồi cập nhật bước 2:

*

Hình dưới là biểu diễn biệc cập nhật hệ số trong gradient descent, điểm đỏ là giá trị nhỏ nhất ta cần tìm, các điểm ở ngoài cùng là giá trị khởi tạo của hệ số trong gradient descent. Ta có thể thấy vì không có nhiễu nên batch gradient descent thì hệ số cập nhật trực tiếp theo 1 đường thẳng. Mini-batch thì mất nhiều thời gian hơn và còn đi chệch hướng tuy nhiên thì vẫn đến được điểm đỏ. Còn stochastic thì đi khá lòng vòng để đến được điểm đỏ và vì dữ liệu quá nhiễu nên có thể thuật toán gradient descent chỉ quanh điểm đỏ mà không đến được điểm đỏ (minimum point).

Xem thêm:   Chú Ý Đơn Thuần Là Gì ? Nghĩa Của Từ Đơn Thuần Trong Tiếng Việt

*

Giá trị thật dữ liệu (ground truth) ở giữa tâm các đường tròn. Các dấu X là các giá trị dự đoán. Ta thấy nếu high bias thì giá trị dự đoán rất xa tâm. Tuy nhiên nếu high variance thì các giá trị dự đoán phân tán rộng dẫn đến việc ra giá trị thực tế. => Ta mong muốn low bias và low variance.

*

Dropout hạn chế việc overfitting

Overfitting là mô hình đang dùng quá phức tạp so với mô hình thật của dữ liệu. Khi ta dùng dropout như hình trên thì rõ ràng mô hình bên phải đơn giản hơn => tránh overfitting.

Xem thêm: Là Gì? Nghĩa Của Từ Breadth Là Gì ? Market Breadth Là Gì

Thêm vào đó, vì mỗi bước khi train model thì ngẫu nhiên (1-p%) các node bị loại bỏ nên model không thể phụ thuộc vào bất kì node nào của layer trước mà thay vào đó có xu hướng trải đều weight, giống như trong L2 regularization => tránh được overfitting.

Lời khuyên khi dùng dropout

Hệ số p nên ở khoảng . Nếu p quá nhỏ thì không có tác dụng chống overfitting, tuy nhiên nếu p quá lớn thì gần như loại bỏ layer đấy và có dễ dẫn đến underfitting. Nên dùng model lớn, phức tạp hơn vì ta có dropout chống overfitting. Dropout chỉ nên dùng cho fully connected layer, ít khi được dùng cho ConvNet layer Hệ số p ở các layer nên tỉ lệ với số lượng node trong FC layer đó.

Activation function

Non-linear activation function

Hàm activation function được dùng sau bước tính tổng linear trong neural network hoặc sau convolutional layer trong CNN. Và hàm activation là non-linear function.

Xem thêm:   Nghĩa Của Từ Chấp Nhận Là Gì ? Trưởng Thành Là Khi Ta Biết Chấp Nhận

Linear function là gì? Theo wiki, “a linear function from the real numbers to the real numbers is a function whose graph is a line in the plane “, tóm lại linear function là một đường thẳng dạng y = a*x + b. Vậy sẽ ra sao nếu hàm activation trong neural network là một linear function?

Giả sử hàm activation dạng y = f(x) = 2*x + 3 và neural network như sau:

**Hàm sigmoid

Đạo hàm hàm sigmoid

displaystyle sigma(x)frac{1}{1+e^{-x}} => frac{d(sigma(x))}{dx} = sigma(x) * (1 – sigma(x)), do displaystyle sigma(x) > 0 =>sigma(x) * (1 – sigma(x))

Ví dụ displaystyle (frac{1}{4})^{20} = 9 * 10^{-13} nên nếu bạn nhìn vào công thức (1) ở trên thì ở những layer đầu tiên sẽ bị vanishing gradient,

Tanh activation functionHàm ReLU

Hàm relu (rectified linear unit): displaystyle y = max(0, x)

Nhận xét:

Hàm ReLU activation đơn giản để tính => thời gian train model nhanh hơn.Đạo hàm là 1 với x >= 0 nên không bị vanishing gradient.

Tuy nhiên với các node có giá trị nhỏ hơn 0, qua ReLU activation sẽ thành 0, hiện tượng đấy gọi là “Dying ReLU“. Nếu các node bị chuyển thành 0 thì sẽ không có ý nghĩa với bước linear activation ở lớp tiếp theo và các hệ số tương ứng từ node đấy cũng không được cập nhật với gradient descent. => Leaky ReLU ra đời.

Leaky ReLUHàm Leaky ReLU

Hàm Leaky ReLU có các điểm tốt của hàm ReLU và giải quyết được vấn đề Dying ReLU bằng cách xét một độ dốc nhỏ cho các giá trị âm thay vì để giá trị là 0.

Lời khuyên: Mặc định nên dùng ReLU làm hàm activation. Không nên dùng hàm sigmoid.

Bài 11: Object detection với Faster R-CNNBài 9: Transfer learning và data augmentation

Trả lời

Email của bạn sẽ không được hiển thị công khai.