Backpropagation to adjust weights in a neural net when receiving new training examples
Not that I know of. If you do come across any, let me know, or better still, email r-help. Good luck with what you are trying to do. Jude Ryan ________________________________ From: Filipe Rocha [mailto:filipemarocha at gmail.com] Sent: Friday, May 29, 2009 1:17 PM To: Ryan, Jude Cc: r-help at r-project.org Subject: Re: [R] Backpropagation to adjust weights in a neural net when receiving new training examples Thanks a lot for your answers. I can try to implement backpropagation myself with that information. But there isnt a function or method of backpropagation of error for new examples of training only to change the already created neural net? I want to implemennt reinforcement learning... Thanks in advance Filipe Rocha 2009/5/29 <jude.ryan at ubs.com> You can figure out which weights go with which connections with the function summary(nnet.object) and nnet.object$wts. Sample code from Venables and Ripley is below: # Neural Network model in Modern Applied Statistics with S, Venables and Ripley, pages 246 and 247
library(nnet)
attach(rock)
dim(rock)
[1] 48 4
area1 <- area/10000; peri1 <- peri/10000
rock1 <- data.frame(perm, area = area1, peri = peri1, shape)
dim(rock1)
[1] 48 4
head(rock1)
perm area peri shape 1 6.3 0.4990 0.279190 0.0903296 2 6.3 0.7002 0.389260 0.1486220 3 6.3 0.7558 0.393066 0.1833120 4 6.3 0.7352 0.386932 0.1170630 5 17.1 0.7943 0.394854 0.1224170 6 17.1 0.7979 0.401015 0.1670450
rock.nn <- nnet(log(perm) ~ area + peri + shape, rock1, size=3,
decay=1e-3, linout=T, skip=T, maxit=1000, Hess=T) # weights: 19 initial value 1196.787489 iter 10 value 32.400984 iter 20 value 31.664545 ... iter 280 value 14.230077 iter 290 value 14.229809 final value 14.229785 converged
summary(rock.nn)
a 3-3-1 network with 19 weights options were - skip-layer connections linear output units decay=0.001 b->h1 i1->h1 i2->h1 i3->h1 -0.51 -9.33 14.59 3.85 b->h2 i1->h2 i2->h2 i3->h2 0.93 3.35 6.09 -5.86 b->h3 i1->h3 i2->h3 i3->h3 0.80 -10.93 -4.58 9.53 b->o h1->o h2->o h3->o i1->o i2->o i3->o 1.89 -14.62 7.35 8.77 -3.00 -4.25 4.44
sum((log(perm) - predict(rock.nn))^2)
[1] 13.20451
rock.nn$wts
[1] -0.5064848 -9.3288410 14.5859255 3.8521844 0.9266730 3.3524267 6.0900909 -5.8628448 0.8026366 -10.9345352 -4.5783516 9.5311123 [13] 1.8866734 -14.6181959 7.3466236 8.7655882 -2.9988287 -4.2508948 4.4397158
In the output from summary(rock.nn), b is the bias or intercept, h1 is
the 1st hidden neuron, i1 is the first input (peri) and o is the
(linear) output. So b->h1 is the bias or intercept to the first hidden
neuron, i1->h1 is the 1st input (peri) to the first hidden neuron (there
are 3 hidden neurons in this example), h1->o is the 1st hidden neuron to
the first output, and i1->o is the first input to the output (since
skip=T - this is a skip layer network). The weights are below (b->h1 ..)
but are rounded. But rock.nn$wts gives you the un-rounded weights. If
you compare the output from summary(rock.nn) and rock.nn$wts you will
see that the first row of weights from summary() is listed first in
rock.nn$wts, followed by the 2nd row of weights from summary() and so
on.
You can construct the neural network equations manually (this is not in
the Venables Ripley book) and check the results against the predict()
function to verify that the weights are listed in the order I described.
The code to do this is:
# manually calculate the neural network predictions based on the neural
network equations
rock1$h1 <- -0.5064848 -9.3288410 * rock1$area + 14.5859255 * rock1$peri
+ 3.8521844 * rock1$shape
rock1$logistic_h1 <- exp(rock1$h1) / (1 + exp(rock1$h1))
rock1$h2 <- 0.9266730 + 3.3524267 * rock1$area + 6.0900909 * rock1$peri
-5.8628448 * rock1$shape
rock1$logistic_h2 <- exp(rock1$h2) / (1 + exp(rock1$h2))
rock1$h3 <- 0.8026366 - 10.9345352 * rock1$area - 4.5783516 * rock1$peri
+ 9.5311123 * rock1$shape
rock1$logistic_h3 <- exp(rock1$h3) / (1 + exp(rock1$h3))
rock1$pred1 <- (1.8866734 - 14.6181959 * rock1$logistic_h1 + 7.3466236 *
rock1$logistic_h2 +
8.7655882 * rock1$logistic_h3 - 2.9988287 * rock1$area -
4.2508948 * rock1$peri +
4.4397158 * rock1$shape)
rock1$nn.pred <- predict(rock.nn)
head(rock1)
perm area peri shape h1 logistic_h1 h2
logistic_h2 h3 logistic_h3 pred1 nn.pred
1 6.3 0.4990 0.279190 0.0903296 -0.7413656 0.3227056 3.770238
0.9774726 -5.070985 0.0062370903 2.122910 2.122910
2 6.3 0.7002 0.389260 0.1486220 -0.7883026 0.3125333 4.773323
0.9916186 -7.219361 0.0007317343 1.514820 1.514820
3 6.3 0.7558 0.393066 0.1833120 -1.1178398 0.2464122 4.779515
0.9916699 -7.514112 0.0005450367 2.451231 2.451231
4 6.3 0.7352 0.386932 0.1170630 -1.2703391 0.2191992 5.061506
0.9937039 -7.892204 0.0003735057 2.656199 2.656199
5 17.1 0.7943 0.394854 0.1224170 -1.6854993 0.1563686 5.276490
0.9949156 -8.523675 0.0001986684 3.394902 3.394902
6 17.1 0.7979 0.401015 0.1670450 -1.4573040 0.1888800 5.064433
0.9937222 -8.165892 0.0002841023 3.072776 3.072776
The first 6 records show that the numbers from the manual equations and
the predict() function are the same (the last 2 columns). As VR point
out in their book, there are several solutions and a random starting
point and if you run the same example your results may differ.
Hope this helps.
Jude Ryan
Filipe Rocha wrote:
I want to create a neural network, and then everytime it receives new data, instead of creating a new nnet, i want to use a backpropagation algorithm to adjust the weights in the already created nn. I'm using nnet package, I know that nn$wts gives the weights, but I cant find out which weights belong to which conections so I could implement the backpropagation algorithm myself. But if anyone knows some function to do this, it would be even better. In anycase, thank you! Filipe Rocha ___________________________________________ Jude Ryan Director, Client Analytical Services Strategy & Business Development UBS Financial Services Inc. 1200 Harbor Boulevard, 4th Floor Weehawken, NJ 07086-6791 Tel. 201-352-1935 Fax 201-272-2914 Email: jude.ryan at ubs.com Please do not transmit orders or instructions regarding a UBS account electronically, including but not limited to e-mail, fax, text or instant messaging. The information provided in this e-mail or any attachments is not an official transaction confirmation or account statement. For your protection, do not include account numbers, Social Security numbers, credit card numbers, passwords or other non-public information in your e-mail. Because the information contained in this message may be privileged, confidential, proprietary or otherwise protected from disclosure, please notify us immediately by replying to this message and deleting it from your computer if you have received this communication in error. Thank you. UBS Financial Services Inc. UBS International Inc. UBS Financial Services Incorporated of Puerto Rico UBS AG UBS reserves the right to retain all messages. Messages are protected and accessed only in legally justified cases. -------------- next part -------------- Please do not transmit orders or instructions regarding a UBS account electronically, including but not limited to e-mail, fax, text or instant messaging. The information provided in this e-mail or any attachments is not an official transaction confirmation or account statement. For your protection, do not include account numbers, Social Security numbers, credit card numbers, passwords or other non-public information in your e-mail. Because the information contained in this message may be privileged, confidential, proprietary or otherwise protected from disclosure, please notify us immediately by replying to this message and deleting it from your computer if you have received this communication in error. Thank you. UBS Financial Services Inc. UBS International Inc. UBS Financial Services Incorporated of Puerto Rico UBS AG UBS reserves the right to retain all messages. Messages are protected and accessed only in legally justified cases.