Dropout Là Gì – Kỹ Thuật Dropout (Bỏ Học) Trong Deep Learning

1. Dropout là gì, nó có ý nghĩa gì trong mạng neural network

Theo Wikipedia, thuật ngữ “dropout” đề cập đến việc bỏ qua các đơn vị (unit) (cả hai hidden unit và visible unit) trong mạng neural network.

Bạn đang xem: Dropout là gì

Hiểu đơn thuần là, trong mạng neural network, kỹ thuật dropout là việc tất cả chúng ta sẽ bỏ lỡ một vài unit trong suốt quy trình train trong quy mô, những unit bị bỏ lỡ được lựa chọn ngẫu nhiên. Ở đây, tất cả chúng ta hiểu “ bỏ lỡ – ignoring ” là unit đó sẽ không tham gia và góp phần vào quy trình huấn luyện và đào tạo ( Viral tiến và Viral ngược ) .

Về mặt kỹ thuật, tại mỗi giai đoạn huấn luyện, mỗi node có xác suất bị bỏ qua là 1-p và xác suất được chọn là p

2. Tạo sao chúng ta cần dropout2. Tạo sao tất cả chúng ta cần dropoutGiả sử rằng bạn hiểu trọn vẹn những gì đã nói ở phần 1, câu hỏi đặt ra là tại sao tất cả chúng ta cần đến dropout, tại sao tất cả chúng ta cần phải vô hiệu một vài những unit nào đó trong mạng neural network ?

Câu trả lời cho câu hỏi này là để chống over-fitting

Khi tất cả chúng ta sử dụng full connected layer, những neural sẽ nhờ vào “ mạnh ” lẫn nhau trong suốt quy trình huấn luyện và đào tạo, điều này làm giảm sức mạng cho mỗi neural và dẫn đến bị over-fitting tập train .3. Dropout3. DropoutĐọc đến đây, bạn đã có một khái niệm cơ bản về dropout và động lực – động cơ để tất cả chúng ta sử dụng nó. Nếu bạn chỉ muốn có cái nhìn tổng quan về dropout trong neural network, hai sections trên đã cung ứng vừa đủ thông tin cho bạn, bạn hoàn toàn có thể dừng tại đây. Phần tiếp theo, tất cả chúng ta sẽ nói kỹ hơn về mặt kỹ thuật của dropout .Trước đây, trong machine learning, người ta thường sử dụng regularization để ngăng chặn over-fititng. Regularization làm giảm over-fitting bằng cách thêm yếu tố “ phạt ” vào hàm độ lỗi ( loss function ). Bằng việc thêm vào điểm phạt này, quy mô được huấn luyện và đào tạo sẽ giúp những features weights giảm đi sự phụ thuộc vào lẫn nhau. Đối với những ai đã sử dụng Logistic Regression rồi thì sẽ không lạ lẫm với thuật ngữ phạt L1 ( Laplacian ) và L2 ( Gaussian ) .Dropout là một kỹ thuật khác, một cách tiếp cận khác để regularization trong mạng neural netwoks .Kỹ thuật dropout được thực thi như sau :

Trong pha train: với mỗi hidden layer, với mỗi trainning sample, với mỗi lần lặp, chọn ngẫu nhiên p phần trăm số node và bỏ qua nó (bỏ qua luôn hàm kích hoạt cho các node bị bỏ qua).

Trong pha test: Sử dụng toàn bộ activations, nhưng giảm chúng với tỷ lệ p (do chúng ta bị miss p% hàm activation trong quá trình train).

*Mô tả về kiến trúc mạng có và không có dropout4. Một số đặc điểm rút ra được khi huấn luyện nhiều mô hình khác nhau sử dụng dropout4. Một số đặc thù rút ra được khi huấn luyện và đào tạo nhiều quy mô khác nhau sử dụng dropout

Dropout ép mạng neural phải tìm ra nhiều robust features hơn, với đặc điểm là chúng phải hữu ích hơn, tốt hơn, ngon hơn khi kết hợp với nhiều neuron khác.

Xem thêm: Phân Biệt Hàng Chỉ Định Là Gì ? Hàng Chỉ Định Khác Biệt Gì Với Hàng Freehand

Dropout yên cầu phải gấp đôi quy trình đào tạo và giảng dạy để đạt được sự quy tụ. Tuy nhiên, thời hạn giảng dạy cho mỗi epoch sẽ ít hơn .Với H unit trong quy mô, mỗi unit đều có xác xuất bị bỏ lỡ hoặc được chọn, tất cả chúng ta sẽ có 2 ^ H quy mô hoàn toàn có thể có. Trong pha test, hàng loạt network được sử dụng và mỗi hàm activation được giảm đi với thông số p .5. Thực nghiệm trong keras5. Thực nghiệm trong kerasNhững yếu tố nói ở trên chỉ là triết lý. Bây giờ tất cả chúng ta sẽ bắt tay vào làm thực tiễn. Để xem thử dropout hoạt động giải trí như thế nào, tất cả chúng ta sẽ kiến thiết xây dựng quy mô deep net sử dụng keras và sử dụng tập dữ liệu cifar-10. Mô hình tất cả chúng ta thiết kế xây dựng có 3 hidden layer với size lần lượt là 64, 128, 256 và 1 full connected layer có kích cỡ 512 và output layer có size 10 ( do mình có 10 lớp ) .Chúng ta sử dụng hàm kích hoạt là ReLU trên những hidden layer và sử dụng hàm sigmoid trên output layer. Sử dụng hàm lỗi categorical cross-entropy .Trong trường hợp quy mô có sử dụng dropout, tất cả chúng ta sẽ set dropout ở toàn bộ những layer và đổi khác tỷ suất dropout nằm trong khoảng chừng từ 0.0 đến 0.9 với bước nhảy là 0.1 .Mô hình setup với số epochs là 20. Bắt đầu xem nào .Đầu tiên, tất cả chúng ta sẽ load một vài thư viện thiết yếuimport numpy as npimport osimport kerasfrom keras.datasets import cifar10from keras.models import Sequentialfrom keras.layers import Dense, Dropout, Activation, Flattenfrom keras.layers import Convolution2D, MaxPooling2Dfrom keras.optimizers import SGDfrom keras.utils import np_utilsfrom keras.preprocessing.image import ImageDataGeneratorimport matplotlib.pyplot as pltfrom pylab import rcParamsrcParams = 20, 20 from keras.datasets import cifar10 ( X_train, y_train ), ( X_test, y_test ) = cifar10. load_data ( ) print ( ” Training data : ” ) print ( ” Number of examples : “, X_train. shape < 0 > ) print ( ” Number of channels : “, X_train. shape <3 > ) print ( ” Image size : “, X_train. shape < 1 >, X_train. shape < 2 >, X_train. shape <3 > ) print ( ” Test data : ” ) print ( ” Number of examples : “, X_test. shape < 0 > ) print ( ” Number of channels : “, X_test. shape <3 > ) print ( ” Image size : “, X_test. shape < 1 >, X_test. shape < 2 >, X_test. shape <3 > ) Kết quảTraining data : Number of examples : 50000N umber of channels : 3I mage size : 32 32 3T est data : Number of examples : 10000N umber of channels : 3I mage size : 32 32 3C húng ta có 50000 hình train, và 10000 hình test. Mỗi hình là một ảnh RGB có kích cỡ 33×32 x3 px .*dataset cifar 10Tiếp theo, tất cả chúng ta sẽ chuẩn hoá tài liệu. Đây là 1 bước quan trọng trước khi giảng dạy quy mô

# In<3>:Specify Training ParametersbatchSize = 512 #– Training Batch Sizenum_classes = 10 #– Number of classes in CIFAR-10 datasetnum_epochs = 100 #– Number of epochs for training learningRate= 0.001 #– Learning rate for the networklr_weight_decay = 0.95 #– Learning weight decay. Reduce the learn rate by 0.95 after epochimg_rows, img_cols = 32, 32 #– input image dimensionsY_train = np_utils.to_categorical(y_train, num_classes)Y_test = np_utils.to_categorical(y_test, num_classes)batchSize = 512 #– Training Batch Sizenum_classes = 10 #– Number of classes in CIFAR-10 datasetnum_epochs = 100 #– Number of epochs for training learningRate= 0.001 #– Learning rate for the networklr_weight_decay = 0.95 #– Learning weight decay. Reduce the learn rate by 0.95 after epochimg_rows, img_cols = 32, 32 #– input image dimensionsY_train = np_utils.to_categorical(y_train, num_classes)Y_test = np_utils.to_categorical(y_test, num_classes)# In<4>:VGGnet-10from keras.layers import Conv2Dimport copyresult = {}y = {}loss = <>acc = <>dropouts = <0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9>for dropout in dropouts: print(“Dropout: “, (dropout)) model = Sequential() #– layer 1 model.add(Conv2D(64, (3, 3), border_mode=”valid”, input_shape=( img_rows, img_cols,3))) model.add(Dropout(dropout)) model.add(Conv2D(64, (3, 3))) model.add(Dropout(dropout)) model.add(Activation(“relu”)) model.add(MaxPooling2D(pool_size=(2, 2))) ##–layer 2 model.add(Conv2D(128, (3, 3))) model.add(Dropout(dropout)) model.add(Activation(“relu”)) model.add(MaxPooling2D(pool_size=(2, 2))) ##–layer 3 model.add(Conv2D(256, (3, 3))) model.add(Dropout(dropout)) model.add(Activation(“relu”)) model.add(MaxPooling2D(pool_size=(2, 2))) ##– layer 4 model.add(Flatten()) model.add(Dense(512)) model.add(Activation(“relu”)) #– layer 5 model.add(Dense(num_classes)) #– loss model.add(Activation(“softmax”)) sgd = SGD(lr=learningRate, decay = lr_weight_decay) model.compile(loss=”categorical_crossentropy”, optimizer=”sgd”, metrics=) model_cce = model.fit(X_train, Y_train, batch_size=batchSize, epochs=20, verbose=1, shuffle=True, validation_data=(X_test, Y_test)) score = model.evaluate(X_test, Y_test, verbose=0) y = model.predict(X_test) print(“Test score:”, score<0>) print(“Test accuracy:”, score<1>) result = copy.deepcopy(model_cce.history) loss.append(score<0>) acc.append(score<1>)# In<5>: plot dropout import numpy as np import matplotlib.pyplot as pltwidth = 0.1plt.bar(dropouts, acc, width, align=”center”)plt.tick_params(axis=”both”, which=”major”, labelsize=35)plt.tick_params(axis=”both”, which=”minor”, labelsize=35)plt.ylabel(“Accuracy”,size = 30)plt.xlabel(“Dropout”, size = 30)plt.show()# In<6>: plot non drop outimport numpy as np import matplotlib.pyplot as pltwidth = 0.1plt.bar(dropouts, loss, width, align=”center”,color = “green”)plt.tick_params(axis=”both”, which=”major”, labelsize=35)plt.tick_params(axis=”both”, which=”minor”, labelsize=35)plt.ylabel(“Loss”,size = 30)plt.xlabel(“Dropout”, size = 30)plt.show()*Kết quả

Nhìn hình tác dụng ở trên, tất cả chúng ta có 1 số ít Tóm lại nhỏ như sau :

Giá trị dropout tốt nhất là 0.2, khoảng dropout cho giá trị chấp nhận được là nằm trong đoạn từ 0 đến 0.5. Nếu dropout lớn hơn 0.5 thì kết quả hàm huấn luyện trả về khá tệ.

Xem thêm: Đói Bụng Và Dị Hóa Cơ Là Gì ? Phân Biệt Với Đồng Hóa Nguyên Nhân Và Giải Pháp Khi Tập Luyện

Giá trị độ đúng chuẩn còn khá thấp => 20 epochs là chưa đủ, cần huấn luyện và đào tạo nhiều hơn nữa .

ĐÁNH GIÁ post
Bài viết liên quan

Tư vấn miễn phí (24/7) 094 179 2255