Drop out of là gì

1. Dropout là gì, nó gồm ý nghĩa sâu sắc gì vào mạng neural network

Theo Wikipedia, thuật ngữ “dropout” đề cùa đến bài toán làm lơ những đơn vị chức năng (unit) (cả nhị hidden unit và visible unit) trong mạng neural network.

Bạn đang xem: Drop out of là gì

Hiểu dễ dàng và đơn giản là, vào mạng neural network, kỹ thuật dropout là vấn đề bọn họ vẫn bỏ sang một vài unit trong suốt quá trình train vào mô hình, phần đông unit bị bỏ qua được lựa chọn đột nhiên. Ở trên đây, họ hiểu “làm lơ - ignoring” là unit đó sẽ không tđê mê gia với góp phần vào quy trình huấn luyện (lan truyền tiến và lan truyền ngược).

Về mặt chuyên môn, tại mỗi quá trình giảng dạy, mỗi node có Tỷ Lệ bị bỏ qua mất là 1-p cùng phần trăm được lựa chọn là p

2. Tạo sao bọn họ nên dropout

Giả sử rằng bạn đọc trọn vẹn các gì đang nói tại đoạn 1, câu hỏi đề ra là tại sao họ đề nghị đến dropout, vì sao chúng ta cần được sa thải một vài các unit như thế nào đó vào mạng neural network?

Câu trả lời mang lại thắc mắc này là để phòng over-fitting

lúc bọn họ sử dụng full connected layer, các neural vẫn nhờ vào “mạnh” cho nhau trong veo quy trình huấn luyện và đào tạo, điều này có tác dụng bớt mức độ mạng cho mỗi neural và dẫn mang đến bị over-fitting tập train.

3. Dropout

Đọc cho trên đây, bạn đã có một có mang cơ bản về dropout cùng rượu cồn lực - bộ động cơ để họ áp dụng nó. Nếu bạn chỉ ao ước gồm tầm nhìn tổng quan liêu về dropout trong neural network, hai sections bên trên đã cung ứng vừa đủ báo cáo cho chính mình, bạn cũng có thể giới hạn trên phía trên. Phần tiếp sau, chúng ta sẽ nói kỹ rộng về khía cạnh kỹ thuật của dropout.

Trước trên đây, vào machine learning, fan ta thường sử dụng regularization để ncăng thẳng ngăn over-fititng. Regularization có tác dụng giảm over-fitting bằng cách thêm nhân tố “phạt” vào hàm độ lỗi (loss function). Bằng vấn đề cấp dưỡng điểm phạt này, mô hình được đào tạo và huấn luyện sẽ giúp các features weights giảm đi sự phụ thuộc vào cho nhau. Đối với phần đa ai đó đã áp dụng Logistic Regression rồi thì vẫn không xa lạ với thuật ngữ pphân tử L1(Laplacian) với L2 (Gaussian).

Dropout là 1 nghệ thuật không giống, một bí quyết tiếp cận không giống nhằm regularization vào mạng neural netwoks.

Kỹ thuật dropout được tiến hành như sau:

Trong pha train: cùng với mỗi hidden layer, cùng với mỗi trainning sample, cùng với các lần lặp, chọn tự dưng p Tỷ Lệ số node và làm lơ nó (bỏ lỡ luôn luôn hàm kích hoạt cho những node bị vứt qua).

Trong pha test: Sử dụng cục bộ activations, tuy thế sút chúng với xác suất p (vì chưng chúng ta bị miss p% hàm activation trong quá trình train).

*
Mô tả về phong cách xây dựng mạng tất cả cùng không có dropout

4. Một số Điểm lưu ý đúc kết được khi huấn luyện nhiều mô hình khác biệt thực hiện dropout

Dropout nghiền mạng neural bắt buộc tìm thấy các robust features hơn, cùng với điểm sáng là bọn chúng bắt buộc có lợi hơn, giỏi hơn, ngon rộng Lúc kết phù hợp với nhiều neuron khác.

Xem thêm: Đan Trường Lên Tiếng Bảo Vệ Thanh Duy Bao Nhiêu Tuổi, Chung Thanh Duy

Dropout yên cầu yêu cầu gấp đôi quy trình đào tạo và huấn luyện để dành được sự quy tụ. Tuy nhiên, thời gian đào tạo cho mỗi epoch sẽ ít hơn.

Với H unit trong mô hình, từng unit đều phải có xác xuất bị bỏ qua mất hoặc được lựa chọn, bọn họ sẽ sở hữu được 2^H quy mô hoàn toàn có thể tất cả. Trong pha thử nghiệm, toàn bộ network được thực hiện và từng hàm activation được giảm xuống với thông số p.

5. Thực nghiệm vào keras

Những vụ việc nói trên chỉ là kim chỉ nan. Bây tiếng chúng ta đã hợp tác vào làm cho thực tiễn. Để xem test dropout hoạt động ra sao, bọn họ sẽ xây dựng mô hình deep net sử dụng keras và áp dụng tập tài liệu cifar-10. Mô hình họ phát hành có 3 hidden layer cùng với form size theo lần lượt là 64, 128, 256 với 1 full connected layer tất cả form size 512 và output layer bao gồm form size 10 (do mình có 10 lớp).

Chúng ta áp dụng hàm kích hoạt là ReLU trên những hidden layer với thực hiện hàm sigmoid bên trên output layer. Sử dụng hàm lỗi categorical cross-entropy.

Trong ngôi trường hòa hợp quy mô bao gồm áp dụng dropout, bọn họ sẽ mix dropout nghỉ ngơi tất cả các layer cùng thay đổi tỷ lệ dropout ở trong khoảng từ 0.0 mang đến 0.9 với bước dancing là 0.1.

Mô hình thiết đặt với số epochs là trăng tròn. Bắt đầu coi như thế nào.

Trước hết, bọn họ sẽ load một vài tlỗi viện yêu cầu thiết

import 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<"figure.figsize"> = đôi mươi, 20from keras.datasets import cifar10(X_train, y_train), (X_chạy thử, 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_demo.shape<0>)print("Number of channels:", X_thử nghiệm.shape<3>)print("Image size:",X_kiểm tra.shape<1>, X_chạy thử.shape<2>, X_thử nghiệm.shape<3>)Kết quả

Training data:Number of examples: 50000Number of channels: 3Image size: 32 32 3Test data:Number of examples: 10000Number of channels: 3Image size: 32 32 3Chúng ta tất cả 50000 hình train, cùng 10000 hình kiểm tra. Mỗi hình là 1 hình họa RGB có kích thước 33x32x3 px.

*
dataset cifar 10

Tiếp theo, chúng ta vẫn chuẩn chỉnh hoá tài liệu. Đây là một trong những bước quan trọng đặc biệt trước khi đào tạo và huấn luyện mô hình

# 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 #-- đầu vào image dimensionsY_train = np_utils.to_categorical(y_train, num_classes)Y_chạy thử = 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)) Mã Sản Phẩm = 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))) Mã Sản Phẩm.add(Dropout(dropout)) Model.add(Activation("relu")) model.add(MaxPooling2D(pool_size=(2, 2))) ##--layer 2 model.add(Conv2D(128, (3, 3))) Mã Sản Phẩm.add(Dropout(dropout)) Model.add(Activation("relu")) mã sản phẩm.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 Mã Sản Phẩm.add(Flatten()) Mã Sản Phẩm.add(Dense(512)) Mã Sản Phẩm.add(Activation("relu")) #-- layer 5 model.add(Dense(num_classes)) #-- loss mã sản phẩm.add(Activation("softmax")) sgd = SGD(lr=learningRate, decay = lr_weight_decay) Model.compile(loss="categorical_crossentropy", optimizer="sgd", metrics=<"accuracy">) model_cce = mã sản phẩm.fit(X_train, Y_train, batch_size=batchSize, epochs=trăng tròn, verbose=1, shuffle=True, validation_data=(X_test, Y_test)) score = Mã Sản Phẩm.evaluate(X_kiểm tra, Y_chạy thử, verbose=0) y = Mã Sản Phẩm.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",form size = 30)plt.xlabel("Dropout", kích cỡ = 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", kích thước = 30)plt.show()

*
Kết quả

Nhìn hình kết quả ngơi nghỉ trên, họ bao gồm một vài Tóm lại nhỏ tuổi nhỏng sau:

Giá trị dropout cực tốt là 0.2, khoảng chừng dropout mang đến quý giá gật đầu được là bên trong đoạn trường đoản cú 0 đến 0.5. Nếu dropout to hơn 0.5 thì công dụng hàm huấn luyện trả về khá tệ.

Giá trị độ đúng chuẩn còn khá phải chăng => trăng tròn epochs là chưa đầy đủ, bắt buộc đào tạo nhiều hơn thế nữa nữa.