Java Adaptive Linear Neuron (ADALINE)

jeffheaton's picture

The ADALINE neural network was developed by professor Bernard Widrow and his graduate student Ted Hoff. It is a very simple neural network usually used for pattern recognition. ADALINE is short for Adaptive Linear Neuron or Adaptive Linear Element. It is considered a single layer neural network. Though an activation function forms a sort of primitive output layer. Weighted connections are made to this activation function. A threshold, or bias, is also provided for. The output from an ADALINE neural network is usually bipolar.

The ADALINE network modeled in the Encog Workbench looks like this:

adaline neural network

The above diagram produces the following Java code.

    BasicNetwork network = new BasicNetwork();

    Layer inputLayer = new BasicLayer( new ActivationLinear(),false,5);
    inputLayer.addNext(inputLayer);

    Layer outputLayer = new BasicLayer( new ActivationLinear(),true,1);
    inputLayer.addNext(outputLayer);
    network.tagLayer("INPUT",inputLayer);
    network.tagLayer("OUTPUT",outputLayer);
    network.getStructure().finalizeStructure();
    network.reset();

Usually you will just use a pattern to create a common neural network, such as an ADALINE network in Encog. This saves you having to code each connection, like the above code does. The following example uses a pattern to create an ADALINE neural network that can recognize digits.

package org.encog.examples.neural.adaline;

import org.encog.neural.activation.ActivationBiPolar;
import org.encog.neural.activation.ActivationLinear;
import org.encog.neural.data.NeuralData;
import org.encog.neural.data.NeuralDataSet;
import org.encog.neural.data.basic.BasicNeuralData;
import org.encog.neural.data.basic.BasicNeuralDataSet;
import org.encog.neural.networks.BasicNetwork;
import org.encog.neural.networks.layers.BasicLayer;
import org.encog.neural.networks.layers.Layer;
import org.encog.neural.networks.training.Train;
import org.encog.neural.networks.training.simple.TrainAdaline;
import org.encog.util.randomize.RangeRandomizer;

public class AdalineDigits {

	public final static int CHAR_WIDTH = 5;
	public final static int CHAR_HEIGHT = 7;
	
	public static String[][] DIGITS = { 
      { " OOO ",
        "O   O",
        "O   O",
        "O   O",
        "O   O",
        "O   O",
        " OOO "  },

      { "  O  ",
        " OO  ",
        "O O  ",
        "  O  ",
        "  O  ",
        "  O  ",
        "  O  "  },

      { " OOO ",
        "O   O",
        "    O",
        "   O ",
        "  O  ",
        " O   ",
        "OOOOO"  },

      { " OOO ",
        "O   O",
        "    O",
        " OOO ",
        "    O",
        "O   O",
        " OOO "  },

      { "   O ",
        "  OO ",
        " O O ",
        "O  O ",
        "OOOOO",
        "   O ",
        "   O "  },

      { "OOOOO",
        "O    ",
        "O    ",
        "OOOO ",
        "    O",
        "O   O",
        " OOO "  },

      { " OOO ",
        "O   O",
        "O    ",
        "OOOO ",
        "O   O",
        "O   O",
        " OOO "  },

      { "OOOOO",
        "    O",
        "    O",
        "   O ",
        "  O  ",
        " O   ",
        "O    "  },

      { " OOO ",
        "O   O",
        "O   O",
        " OOO ",
        "O   O",
        "O   O",
        " OOO "  },

      { " OOO ",
        "O   O",
        "O   O",
        " OOOO",
        "    O",
        "O   O",
        " OOO "  } };
	
	public static NeuralDataSet generateTraining()
	{
		NeuralDataSet result = new BasicNeuralDataSet();
		for(int i=0;i 0.01);
		
		//
		System.out.println("Error:" + network.calculateError(training));
		
		// test it
		for(int i=0;i "+output);
				else
					System.out.println(DIGITS[i][j]);
				
			}
			
			System.out.println();
		}
	}	
}

When run, this program produces the following output.

Epoch #1 Error:0.49019976350873823
Epoch #2 Error:0.33184526864330893
Epoch #3 Error:0.2648569878027761
Epoch #4 Error:0.22394663708060208
Epoch #5 Error:0.1969743898052336
Epoch #6 Error:0.1777392521261772
Epoch #7 Error:0.16310249900844181
Epoch #8 Error:0.15141780468563223
Epoch #9 Error:0.14176141491965236
Epoch #10 Error:0.1335750865062877
Epoch #11 Error:0.1264976940996118
Epoch #12 Error:0.12028213299354028
Epoch #13 Error:0.1147518251232064
Epoch #14 Error:0.10977642256510217
Epoch #15 Error:0.1052573256216797
Epoch #16 Error:0.10111852874143416
Epoch #17 Error:0.09730054418906431
Epoch #18 Error:0.09375621108207914
Epoch #19 Error:0.09044771920335207
Epoch #20 Error:0.08734444780518938
Epoch #21 Error:0.08442136839943402
Epoch #22 Error:0.08165784714382346
Epoch #23 Error:0.07903673560575533
Epoch #24 Error:0.07654367279283213
Epoch #25 Error:0.07416654397543367
Epoch #26 Error:0.07189505723343086
Epoch #27 Error:0.06972040934555132
Epoch #28 Error:0.06763502016207
Epoch #29 Error:0.06563231996190791
Epoch #30 Error:0.06370657815757488
Epoch #31 Error:0.06185276452366755
Epoch #32 Error:0.06006643619340187
Epoch #33 Error:0.05834364520495924
Epoch #34 Error:0.05668086253318751
Epoch #35 Error:0.05507491541652166
Epoch #36 Error:0.05352293545769456
Epoch #37 Error:0.05202231549274202
Epoch #38 Error:0.050570673624098866
Epoch #39 Error:0.049165823128048416
Epoch #40 Error:0.04780574719487715
Epoch #41 Error:0.04648857765701261
Epoch #42 Error:0.04521257701758946
Epoch #43 Error:0.04397612321794037
Epoch #44 Error:0.04277769668404586
Epoch #45 Error:0.041615869274089175
Epoch #46 Error:0.040489294815897775
Epoch #47 Error:0.03939670097730096
Epoch #48 Error:0.03833688225672541
Epoch #49 Error:0.037308693917607674
Epoch #50 Error:0.03631104671995803
Epoch #51 Error:0.03534290232688406
Epoch #52 Error:0.03440326928405701
Epoch #53 Error:0.03349119948676987
Epoch #54 Error:0.03260578506302794
Epoch #55 Error:0.031746155612554464
Epoch #56 Error:0.030911475751097164
Epoch #57 Error:0.030100942917335376
Epoch #58 Error:0.029313785406287336
Epoch #59 Error:0.028549260598632036
Epoch #60 Error:0.02780665335997772
Epoch #61 Error:0.027085274587982287
Epoch #62 Error:0.02638445988848496
Epoch #63 Error:0.025703568364551177
Epoch #64 Error:0.025041981504642638
Epoch #65 Error:0.024399102158081117
Epoch #66 Error:0.023774353587628506
Epoch #67 Error:0.023167178590411827
Epoch #68 Error:0.022577038679615115
Epoch #69 Error:0.022003413320378713
Epoch #70 Error:0.021445799214214627
Epoch #71 Error:0.02090370962699023
Epoch #72 Error:0.020376673756168157
Epoch #73 Error:0.019864236133538174
Epoch #74 Error:0.019365956060145444
Epoch #75 Error:0.018881407070526143
Epoch #76 Error:0.018410176423709408
Epoch #77 Error:0.017951864618748727
Epoch #78 Error:0.01750608493280599
Epoch #79 Error:0.017072462980040122
Epoch #80 Error:0.01665063628974829
Epoch #81 Error:0.01624025390238075
Epoch #82 Error:0.015840975982198843
Epoch #83 Error:0.015452473445477831
Epoch #84 Error:0.015074427603268799
Epoch #85 Error:0.014706529817835498
Epoch #86 Error:0.01434848117196841
Epoch #87 Error:0.013999992150456149
Epoch #88 Error:0.013660782333060978
Epoch #89 Error:0.013330580098405907
Epoch #90 Error:0.013009122338232192
Epoch #91 Error:0.012696154181532556
Epoch #92 Error:0.012391428728107516
Epoch #93 Error:0.012094706791126003
Epoch #94 Error:0.011805756648306156
Epoch #95 Error:0.011524353801358704
Epoch #96 Error:0.011250280743361638
Epoch #97 Error:0.010983326733757084
Epoch #98 Error:0.010723287580681608
Epoch #99 Error:0.010469965430358991
Epoch #100 Error:0.010223168563300496
Epoch #101 Error:0.009982711197072901
Error:0.008355942023730691
 OOO 
O   O
O   O
O   O
O   O
O   O
 OOO  -> 0

  O  
 OO  
O O  
  O  
  O  
  O  
  O   -> 1

 OOO 
O   O
    O
   O 
  O  
 O   
OOOOO -> 2

 OOO 
O   O
    O
 OOO 
    O
O   O
 OOO  -> 3

   O 
  OO 
 O O 
O  O 
OOOOO
   O 
   O  -> 4

OOOOO
O    
O    
OOOO 
    O
O   O
 OOO  -> 5

 OOO 
O   O
O    
OOOO 
O   O
O   O
 OOO  -> 6

OOOOO
    O
    O
   O 
  O  
 O   
O     -> 7

 OOO 
O   O
O   O
 OOO 
O   O
O   O
 OOO  -> 8

 OOO 
O   O
O   O
 OOOO
    O
O   O
 OOO  -> 9

Copyright 2005 - 2012 by Heaton Research, Inc.. Heaton Research™ and Encog™ are trademarks of Heaton Research. Click here for copyright, license and trademark information.