Drop out là gì

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

Theo Wikipedia, thuật ngữ “dropout” đề cập đến việc bỏ lỡ các đơn vị chức năng (unit) (cả nhì hidden unit cùng visible unit) vào mạng neural network.

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

Hiểu dễ dàng và đơn giản là, trong mạng neural network, kỹ thuật dropout là việc chúng ta đang vứt qua 1 vài ba unit trong veo quy trình train trong mô hình, hầu như unit bị làm lơ được gạn lọc ngẫu nhiên. Tại phía trên, bọn họ đọc “bỏ qua mất - ignoring” là unit đó sẽ không còn tmê man gia với góp phần vào quy trình huấn luyện và đào tạo (Viral tiến với lan truyền ngược).

Về mặt kỹ thuật, trên mỗi quá trình đào tạo, mỗi node bao gồm xác suất bị bỏ lỡ là 1-p và xác suất được lựa chọn là p

2. Tạo sao chúng ta buộc phải dropout

Giả sử rằng các bạn đọc trọn vẹn hầu hết gì sẽ nói tại phần 1, câu hỏi đề ra là tại vì sao bọn họ nên mang đến dropout, tại vì sao bọn họ cần được loại trừ một vài ba các unit như thế nào kia trong mạng neural network?

Câu vấn đáp đến thắc mắc này là nhằm kháng over-fitting

khi họ áp 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ấn đề đó làm cho bớt sức mạng cho mỗi neural cùng dẫn đến bị over-fitting tập train.

3. Dropout

Đọc đến phía trên, bạn đã có một có mang cơ bản về dropout cùng động lực - động cơ nhằm chúng ta áp dụng nó. Nếu các bạn chỉ mong gồm cái nhìn tổng quan liêu về dropout trong neural network, nhì sections bên trên đã cung cấp khá đầy đủ lên tiếng cho mình, chúng ta cũng có thể dừng trên phía trên. Phần tiếp theo sau, chúng ta sẽ nói kỹ rộng về mặt chuyên môn của dropout.

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

Dropout là một trong nghệ 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 hiện nlỗi sau:

Trong trộn train: với từng hidden layer, cùng với từng trainning sample, cùng với các lần lặp, chọn thiên nhiên p Xác Suất số node với bỏ lỡ nó (bỏ qua luôn luôn hàm kích hoạt cho những node bị vứt qua).

Trong trộn test: Sử dụng tổng thể activations, cơ mà bớt bọn chúng với xác suất p (vì chưng chúng ta bị miss p% hàm activation vào quy trình train).

*
Mô tả về bản vẽ xây dựng mạng gồm với không có dropout

4. Một số Đặc điểm rút ra được khi giảng dạy nhiều mô hình không giống nhau sử dụng dropout

Dropout xay mạng neural phải tìm thấy những robust features hơn, với điểm lưu ý là bọn chúng nên hữu ích rộng, xuất sắc rộng, ngon rộng Khi kết phù hợp với các neuron khác.

Xem thêm: Nghĩa Của Từ To Watch Over Là Gì, Nghĩa Của Từ To Watch Over

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

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

5. Thực nghiệm trong keras

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

Chúng ta thực hiện hàm kích hoạt là ReLU bên trên các 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 mô hình bao gồm sử dụng dropout, bọn họ đang mix dropout sống toàn bộ các layer với đổi khác tỷ lệ dropout ở trong tầm từ bỏ 0.0 cho 0.9 với bước nhảy là 0.1.

Mô hình cài đặt cùng với số epochs là đôi mươi. Bắt đầu xem như thế nào.

Thứ nhất, bọn họ sẽ load một vài thư viện phải 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"> = trăng tròn, 20from keras.datasets import cifar10(X_train, y_train), (X_demo, 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_kiểm tra.shape<0>)print("Number of channels:", X_demo.shape<3>)print("Image size:",X_demo.shape<1>, X_test.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 bao gồm 50000 hình train, cùng 10000 hình chạy thử. Mỗi hình là một trong những hình họa RGB tất cả kích thước 33x32x3 px.

*
dataset cifar 10

Tiếp theo, chúng ta đang chuẩn chỉnh hoá tài liệu. Đây là một trong bước đặc biệt quan trọng trước lúc đào tạo và giảng dạy tế bào 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 đầu vào image dimensionsY_train = np_utils.to_categorical(y_train, num_classes)Y_thử nghiệm = 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_thử nghiệm = np_utils.to_categorical(y_thử nghiệm, 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 Mã Sản Phẩm.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)) mã sản phẩm.add(Activation("relu")) model.add(MaxPooling2D(pool_size=(2, 2))) ##--layer 2 mã sản phẩm.add(Conv2D(128, (3, 3))) mã sản phẩm.add(Dropout(dropout)) mã sản phẩm.add(Activation("relu")) Mã Sản Phẩm.add(MaxPooling2D(pool_size=(2, 2))) ##--layer 3 Mã Sản Phẩm.add(Conv2D(256, (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 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 Mã Sản Phẩm.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=20, verbose=1, shuffle=True, validation_data=(X_test, Y_test)) score = mã sản phẩm.evaluate(X_test, Y_thử nghiệm, 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",form size = 30)plt.xlabel("Dropout", kích thướ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",kích cỡ = 30)plt.xlabel("Dropout", size = 30)plt.show()

*
Kết quả

Nhìn hình công dụng sinh sống trên, chúng ta gồm một số kết luận nhỏ dại như sau:

Giá trị dropout rất tốt là 0.2, khoảng tầm dropout cho quý giá đồng ý được là phía trong đoạn trường đoản cú 0 mang lại 0.5. Nếu dropout lớn hơn 0.5 thì tác dụng hàm huấn luyện và giảng dạy trả về khá tệ.

Xem thêm: Đổi Radian Sang Độ Trong Excel ? Tổng Hợp Các Hàm Số Lượng Giác Trong Excel

Giá trị độ chính xác còn tương đối rẻ => đôi mươi epochs là không đủ, cần huấn luyện và đào tạo nhiều hơn thế nữa nữa.