| Neural Network Toolbox | ![]() |
LVQ2.1 weight learning function
Syntax
[dW,LS] = learnlv2(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
Description
learnlv2 is the LVQ2 weight learning function.
learnlv2(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) takes several inputs,
W - S x R weight matrix (or S x 1 bias vector).
P - R x Q input vectors (or ones(1,Q)).
Z - S x Q weighted input vectors.
N - S x Q net input vectors.
A - S x Q output vectors.
T - S x Q layer target vectors.
E - S x Q layer error vectors.
gW - S x R weight gradient with respect to performance.
gA - S x Q output gradient with respect to performance.
D - S x S neuron distances.
LP - Learning parameters, none, LP = [].
LS - Learning state, initially should be = [].
dW - S x R weight (or bias) change matrix.
LS - New learning state.
Learning occurs according to learnlv1's learning parameter, shown here with its default value.
LP.lr - 0.01 - Learning rate.
LP.window - 0.25 - Window size (0 to 1, typically 0.2 to 0.3).
learnlv2(code) returns useful information for each code string:
'pnames' - Names of learning parameters.
'pdefaults' - Default learning parameters.
'needg' - Returns 1 if this function uses gW or gA.
Examples
Here we define a sample input P, output A, weight matrix W, and output gradient gA for a layer with a two-element input and three neurons.
We also define the learning rate LR.
p = rand(2,1); w = rand(3,2); n = negdist(w,p); a = compet(n); gA = [-1;1; 1]; lp.lr = 0.5;
Since learnlv2 only needs these values to calculate a weight change (see algorithm below), we will use them to do so.
dW = learnlv2(w,p,[],n,a,[],[],[],gA,[],lp,[])
Network Use
You can create a standard network that uses learnlv2 with newlvq.
To prepare the weights of layer i of a custom network to learn with learnlv2:
net.trainFcn to 'trainr'. (net.trainParam will automatically become trainr's default parameters.)
net.adaptFcn to 'trains'. (net.adaptParam will automatically become trains's default parameters.)
net.inputWeights{i,j}.learnFcn to 'learnlv2'. Set each net.layerWeights{i,j}.learnFcn to 'learnlv2'. (Each weight learning parameter property will automatically be set to learnlv2's default parameters.)
To train the network (or enable it to adapt):
Algorithm
learnlv2 implements Learning Vector Quantization 2.1, which works as follows:
For each presentation, if the winning neuron i should not have won, and the runner up j should have, and the distance di between the winning neuron and the input p is roughly equal to the distance dj from the runner up neuron to the input p according to the given window,
min(di/dj, dj/di) > (1-window)/(1+window)
then move the winning neuron i weights away from the input vector, and move the runner up neuron j weights toward the input according to:
dw(i,:) = - lp.lr*(p'-w(i,:))dw(j,:) = + lp.lr*(p'-w(j,:))
See Also
| learnlv1 | learnos | ![]() |