Dropout là gì

      37
1. Dropout là gì, nó có ý 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ỏ qua các đơn vị (unit) (cả hai hidden unit và visible unit) vào mạng neural network.

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

Hiểu đơn giản là, vào mạng neural network, chuyên môn dropout là việc họ sẽ bỏ qua 1 vài unit vào suốt quá trình train trong mô hình, mọi unit bị làm lơ được sàng lọc ngẫu nhiên. Ở đây, chúng ta hiểu “bỏ qua - ignoring” là unit đó sẽ không còn tham gia và góp sức vào quy trình huấn luyện (lan truyền tiến và viral ngược).

Về mặt kỹ thuật, tại mỗi quy trình huấn luyện, mỗi node có phần trăm bị làm lơ là 1-p và xác suất được chọn là p

2. Chế tạo ra sao họ cần dropout

Giả sử rằng bạn hiểu trọn vẹn những gì sẽ nói tại phần 1, thắc mắc đặt ra là tại sao bọn họ cần mang lại dropout, trên sao chúng ta cần phải thải trừ một vài những unit nào kia trong mạng neural network?

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

Khi chúng ta sử dụng full connected layer, các neural sẽ dựa vào “mạnh” cho nhau trong suốt quy trình huấn luyện, vấn đề này làm sút sức mạng cho từng neural với dẫn cho bị over-fitting tập train.

3. Dropout

Đọc cho đây, bạn đã sở hữu một quan niệm cơ phiên bản về dropout và cồn lực - bộ động cơ để bọn họ sử dụng nó. Nếu như khách hàng chỉ muốn có ánh nhìn tổng quan lại về dropout trong neural network, nhì sections trên đã cung cấp đầy đủ tin tức cho bạn, chúng ta có thể dừng trên đây. Phần tiếp theo, họ sẽ nói kỹ hơn về phương diện kỹ thuật của dropout.

Trước đây, trong machine learning, người ta thường áp dụng regularization để ngăng chặn over-fititng. Regularization làm sút over-fitting bằng phương pháp thêm nguyên 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, mô hình được huấn luyện để giúp các features weights giảm đi sự nhờ vào lẫn nhau. Đối cùng với những ai đã sử dụng Logistic Regression rồi thì sẽ không xa lạ với thuật ngữ phát L1(Laplacian) với L2 (Gaussian).

Dropout là một kỹ thuật khác, một biện pháp tiếp cận khác nhằm regularization vào mạng neural netwoks.

Kỹ thuật dropout được triển khai như sau:

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

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

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

4. Một số điểm sáng rút ra được khi đào tạo và huấn luyện nhiều tế bào hình khác nhau sử dụng dropout

Dropout nghiền mạng neural đề xuất tìm ra các robust features hơn, với điểm lưu ý là chúng nên hữu ích hơn, xuất sắc hơn, ngon rộng khi kết hợp với nhiều neuron khác.

Xem thêm: Tiểu Sử Giáo Sư Hoàng Chí Bảo Sinh Năm Bao Nhiêu, Pháp Luật Plus

Dropout đòi hỏi phải gấp hai quá trình huấn luyện để có được sự hội tụ. Tuy nhiên, thời gian huấn luyện cho mỗi epoch đã ít hơn.

Với H unit trong tế bào hình, mỗi unit đều phải có xác xuất bị làm lơ hoặc được chọn, chúng ta sẽ bao gồm 2^H mô hình hoàn toàn có thể có. Trong trộn test, cục bộ network được thực hiện và từng hàm activation được sụt giảm với thông số p.

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

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

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

Trong ngôi trường hợp quy mô có thực hiện dropout, chúng ta sẽ set dropout ở tất cả các layer và chuyển đổi tỷ lệ dropout nằm trong khoảng từ 0.0 mang đến 0.9 với cách nhảy là 0.1.

Mô hình thiết đặt với số epochs là 20. Ban đầu xem nào.

Đầu tiê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"> = 20, 20from 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: 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, và 10000 hình test. Mỗi hình là một ảnh RGB có kích thước 33x32x3 pixel.

*
dataset cifar 10

Tiếp theo, họ sẽ chuẩn hoá dữ liệu. Đây là một trong những bước quan trọng trước khi đào tạo và giảng dạy 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 #-- đầu vào 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)) 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))) 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=<"accuracy">) 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", 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",size = 30)plt.xlabel("Dropout", kích thước = 30)plt.show()

*
Kết quả

Nhìn hình kết quả ở trên, chúng ta có một vài kết luận nhỏ như sau:

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

Giá trị độ chính xác còn khá thấp => đôi mươi epochs là chưa đủ, đề xuất huấn luyện nhiều hơn nữa.