Neural Network With Matlab #4.5: Huấn luyện mạng nơ-ron (Batch Training - Huấn luyện gói)

Thảo luận trong 'TRÍ TUỆ NHÂN TẠO' bắt đầu bởi Cu Bo, 20 Tháng bảy 2016.

Chia sẻ trang này

Lượt xem: 1,646

  1. Cu Bo

    By:Cu Boin: 20 Tháng bảy 2016
    Cu Bo

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    13
    Đã được thích:
    8
    Neural Network With Matlab #4.5:
    Huấn luyện mạng nơ-ron
    (Batch Training - Huấn luyện gói)

    [​IMG]

    Huấn luyện gói - Batch Training


    Huấn luyện theo gói là phương pháp chỉ update weight W và bias b sau khi tất cả các dữ liệu đầu vào và kết quả mong muốn được đưa vào mạng. Phương pháp có thể áp dụng cho cả mạng tĩnh và mạng động.



    Huấn luyện gói cho mạng tĩnh

    Để huấn luyện theo gói, ta có thể sử dụng hàm train hoặc adapt, tuy nhiên hàm train là sự lựa chọn tốt nhất, vì nó đặc trưng cho sự truy nhập có hiệu quả hơn của thuật toán huấn luyện. Huấn luyện gia tăng chỉ sử dụng hàm adapt; còn hàm train chỉ được sử dụng huấn luyện gói.

    Ta tiếp tục xét ví dụ dành cho mạng tĩnh với tốc độ huấn luyện 0.01.
    Mã:
    net = newlin([-1 1;-1 1],1,0,0.01);
    net.IW{1,1} = [0 0];
    net.b{1} = 0;

    [​IMG]
    Ta sẽ thử huấn luyện gói với hàm adapt, vector đầu vào phải cần phải là một ma trận vector song song.
    Mã:
    P = [1 2 2 3; 2 1 3 1];
    T = [4 5 7 7];
    Khi ta gọi hàm adapt, nó sẽ gọi ra hàm train (là hàm điều chỉnh mặc định cho mạng tuyến tính) và hàm learnwh (là hàm học mặc đinh cho weight W và bias b). Vì thế, Widrow-Hoff learning (learnwh) đã được sử dụng.
    Mã:
    [net,a,e,pf] = adapt(net,P,T);
    a = 0 0 0 0
    e = 4 5 7 7
    Chú ý: đầu ra của mạng đều bằng 0, vì weight W không update cho đến khi tất cả các dữ kiện được đưa vào huấn luyện. Truy cập vào weight W và bias sẽ tìm thấy giá trị:
    Mã:
    net.IW{1,1} = 0.49   0.41
    net.b{1} = 0.23
    Đó là sự khác nhau của kết quả ta vừa đạt được với kết quả của huấn luyện gia tăng.

    Bây giờ, ta sẽ huấn luyện gói sử dụng hàm train. Trước đó, quy tắc Widrow-Hoff có thể được sử dụng cho cả mode gia tăng hoặc mode gói, nó có thể được gọi bằng hàm adapt hoặc hàm train. Có những thuật toán chỉ có thể sử dụng mode gói (vd Levenberg-Marquardt), do đó các thuật toán đó chỉ có thể sử dụng hàm train.

    Xét mạng được thiết lập như sau.
    Mã:
    net = newlin([-1 1;-1 1],1,0,0.01);
    
    net.IW{1,1} = 0;
    net.b{1} = 0;
    Trong trường hợp này, vector đầu vào có thể đặt vào ma trận vector song song hoặc trong mảng vector nối tiếp. Hàm train sẽ chuyển bất kỳ mảng vector nối tiếp nào sang ma trận vector song song.Do đây là mạng tĩnh, và vì hàm train luôn làm việc ở mode gói. Mode gia tăng làm việc bất cứ lúc nào, vì nó được Matlab thực hiện rất hiệu quả.
    Mã:
    P = [1 2 2 3; 2 1 3 1];
    T = [4 5 7 7];
    Bây giờ ta đã sẵn sàng để có thể huấn luyện cho mạng. Ta sẽ chỉ huấn luyện trong một chu kỳ, vì trước đó ta chỉ sử dụng 1 lần với hàm adapt. Hàm huấn luyện mặc định cho mạng tuyến tính là trainb, và hàm học mặc định cho weight và bias là learnwh, nên ta sẽ nhận được kết quả tương tự như sử dụng hàm adapt trong ví dụ trước, khi ta sử dụng hàm thích nghi mặc định là trains.
    Mã:
    net.inputWeights{1,1}.learnParam.lr = 0.01;
    net.biases{1}.learnParam.lr = 0.01;
    net.trainParam.epochs = 1;
    net = train(net,P,T);
    Nếu cho hiển thị weight sau một chu kỳ huấn luyện, ta thấy:
    Mã:
    net.IW{1,1} = 0.49 0.41
    net.b{1} = 0.23
    Kết quả thu được giống với kết quả khi sử dụng hàm adapt ở mode gói. Với mạng tĩnh, hàm adapt có thể được sử dụng cho huấn luyện gia tăng hoặc gói tùy thuộc vào khuôn dạng dữ liệu vào. Nếu dữ liệu đưa vào là ma trận vector song song thì huấn luyện gói xuất hiện. Nếu dữ liệu đưa vào là mảng vector nối tiếp thì huấn luyện gia tăng xuất hiện. Điều đó không đúng với hàm train, nó luôn là huấn luyện gói cho dù khuôn dạng của đầu vào là gì.

    Huấn luyện gói cho mạng động


    Huấn luyện mạng tĩnh tương đối đơn giản. nếu ta sử dùng hàm train để huấn luyện mạng theo mode gói và đầu vào được chuyển thành vector song song (các cột của một ma trận) cho dù trước đây chúng là vector nối tiếp (các phần tử của mảng). Nếu ta sử dụng hàm adapt, khuôn dạng đầu vào sẽ quyết định mode huấn luyện.

    Với mạng động, huấn luyện gói chỉ được thực hiện với hàm train, đặc biệt nếu chỉ có một chuỗi huấn luyện tồn tại. Để minh họa, ta lại xét mạng tuyến tính có trễ. Ta có tốc độ huấn luyện là 0.02. (Khi sử dụng thuật toán giảm độ dốc, ta chọn tốc độ huấn luyện cho mode gói nhỏ hơn mode gia tăng, vì tất cả các độ dốc riêng biệt sẽ được cộng với nhau trước khi xác định được sự thay đổi của các weight).
    Mã:
    net = newlin([-1 1],1,[0 1],0.02);
    net.IW{1,1}=[0 0];
    net.biasConnect=0;
    net.trainParam.epochs = 1;
    Pi = {1};
    P = {2 3 4};
    T = {3 5 6};
    [​IMG]
    Ta muốn huấn luyện mạng với chuỗi tương tự như đã được sử dụng ở phần huấn luyện gia tăng trước đây, nhưng thời điểm update weight chỉ sau khi tất cả các đầu vào được áp dụng (mode gói). Mạng được coi như tuần tự vì đầu vào là một chuỗi, nhưng weight được update theo mode gói.
    Mã:
    net=train(net,P,T,Pi);
    net.IW{1,1} = 0.9   0.62
    Kết quả này khác với kết quả ta thu được ở huấn luyện gia tăng, ở đó weight được update 3 lần trong một set huấn luyện. Đối với huấn luyện theo gói, weight chỉ update một lần trong một chu kỳ huấn luyện.