Single layer neural network. What am I doing wrong?

  • Thread starter Thread starter GProgramer
  • Start date Start date
  • Tags Tags
    Network Neural
Click For Summary
SUMMARY

The discussion centers on the implementation of a single-layer neural network for training using a dataset from a referenced paper. The user encountered issues with convergence to an unacceptable error rate, primarily due to a flawed backpropagation algorithm. It was concluded that a single-layer perceptron struggles with the dataset's complexity, necessitating the addition of a two-node hidden layer to improve performance. The user acknowledged the need for adjustments in their weight update mechanism and is transitioning to a more complex neural network architecture.

PREREQUISITES
  • Understanding of backpropagation algorithms in neural networks
  • Familiarity with single-layer and multi-layer perceptron architectures
  • Knowledge of the tanh activation function and its derivatives
  • Experience with MATLAB for implementing neural network training
NEXT STEPS
  • Implement a two-layer neural network architecture using MATLAB
  • Learn about the effects of different activation functions on neural network performance
  • Explore techniques for visualizing data clusters in neural networks
  • Study advanced backpropagation techniques for multi-layer networks
USEFUL FOR

Machine learning practitioners, neural network developers, and researchers interested in improving neural network training methodologies and architectures.

GProgramer
Messages
10
Reaction score
0
I'm trying to implement this example http://www.cs.bham.ac.uk/~jxb/INC/l3.pdf (page 15)
I'm trying to do Iteration training, but it seems as if the results always converging to a steady error rate that is too large to be acceptable, the values centering around 0 while they should be close to -1 and +1.

I don't know if there's something wrong with the code, or I have the training concept misunderstood?
Code:
	close all;clc;
	M=3;N=1;

	X=[-1 1.0 0.1;-1 2.0 0.2; -1 0.1 0.3; -1 2.0 0.3; -1 0.2 0.4; -1 3.0 0.4; -1 0.1 0.5; -1 1.5 0.5; -1 0.5 0.6; -1 1.6 0.7];
	X=X';
	d=[-1;-1;1;-1;1;-1;1;-1;1;1];

	Wp=rand([M,N]);
	Wp=Wp'/sum(Wp(:));  % theta is 1 so sum of Wp and W needs to be <1
	W=rand([M,N]);
	W=W'/sum(W(:));
	V1=zeros(1,10);  %Pre allocating for speed
	Y1=zeros(1,10);
	e=zeros(1,10);

	while(1)
		
	i=randi(length(X),1);
	%---------------Feed forward---------------%    
	V1(i)=W*X(:,i);
	Y1(i)=tanh(V1(i)/2);
	e(i)=d(i)-Y1(i);


	%------------Backward propagation---------%
	delta1=e(i)*0.5*(1+Y1(i))*(1-Y1(i));

	Wn(1,1)=W(1,1) + 0.1*(W(1,1)-Wp(1,1)) + 0.1*delta1*Y1(i);
	Wn(1,2)=W(1,2) + 0.1*(W(1,2)-Wp(1,2)) + 0.1*delta1*Y1(i);
	Wn(1,3)=W(1,3) + 0.1*(W(1,3)-Wp(1,3)) + 0.1*delta1*Y1(i);

	Wp=W;
	W=Wn;

	figure(1);
	stem(Y1);
	axis([1 10 -1 1]);
	drawnow;
	end
 
Technology news on Phys.org
First off, your backprop algorithm is just wrong. Do you have a reference for the algorithm you are using?

Even if you correct your update algorithm, a single layer perceptron is going to have a very, very hard time with this dataset. Make a scatter plot of this dataset. For example, make a graph with mass on the x axis, speed on the y axis. Mark each fighter with an F, bomber with a B. There are three clusters. Near the y-axis there's a cluster of four light, fast fighters. Near the x-axis there's a cluster of four slow, heavy bombers. The third cluster is going to be problematic for a single layer perceptron. The fighter with mass=1.6, speed=0.7 is very similar to the bomber with mass=1.5, speed=0.5.

Adding a two node hidden layer makes this problem much more amenable to a backprop neural network.
 
D H said:
First off, your backprop algorithm is just wrong. Do you have a reference for the algorithm you are using?

Even if you correct your update algorithm, a single layer perceptron is going to have a very, very hard time with this dataset. Make a scatter plot of this dataset. For example, make a graph with mass on the x axis, speed on the y axis. Mark each fighter with an F, bomber with a B. There are three clusters. Near the y-axis there's a cluster of four light, fast fighters. Near the x-axis there's a cluster of four slow, heavy bombers. The third cluster is going to be problematic for a single layer perceptron. The fighter with mass=1.6, speed=0.7 is very similar to the bomber with mass=1.5, speed=0.5.

Adding a two node hidden layer makes this problem much more amenable to a backprop neural network.
Thank you for your detailed reply. I realized my mistake was taking the Y1 instead of X when readjusting the weights.

Currently it's more or less working (with a couple of the training values having around 30% error rate)

This particular set isn't what I'm aiming for, so it's why I didn't bother doing a detailed graph for it.

I realize that a single layer perceptron isn't enough, and I was just making one so as to test the algo if it's working. I am currently making a 2 hidden layer network, with a dynamic number of neurons in the hidden layers, and I will test it on a sampled cosine function, drawing the output function and the desired function over the same graph so as to compare.

May I ask exactly what is wrong with the algo? If you are talking about the hidden layer deltas, I've yet to add them.

Thank you again for the great reply!
 
Last edited:

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
5K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
1K
  • · Replies 41 ·
2
Replies
41
Views
6K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K