Over the last few days I have been learning about Radial Basis Function Networks (RBFNs). In my previous posts I only discussed the perceptron, however there is an alternative, and arguably better, function to compute the output of a node in a neural network. The perceptron multiplies its inputs by a weight and then sums them, producing output by passing this sum through a function that could be a sigmoid or a threshold with a binary output. In either case, the perceptron effectively creates a line, with one side of the line being 0 and the other being 1.
A single perceptron categorizing the input
An image of 2d space segmented with a RBFN
RBFNs do something very simple: they use the Cartesian equation for any n-dimensional ellipsoid (though technically "ellipsoid" refers to the 3-dimensional variant). The "threshold" that was used by the perceptron is a similar concept to the "radius" of the RBF. As is apparent from the image, an area is surrounded by this function, which allows the neural network to classify regions. If one did not square the distances in each dimension and used an absolute value function instead, it would create a cuboid or rectangle instead. One could make an argument for such a system, but the RBFN seems to be very popular and effective in the field. To simplify its definition: it creates a rounded space around a point and classifies inputs in that region. It gets more complicated with a whole network, rather than a single function, but the RBFN is obviously powerful.
The reason I am bringing this up is because I have decided that a RBFN will power my simulation instead of a perceptron network. As time goes on, I may consider a hybrid between the RBF and perceptron, but for now I will be making the switch, since I consider RBFs to be superior in most situations for classifying information. It is likely that I will also try the "cuboid" approach as well, but I assume that the differences will be insignificant, so the switch would be purely for efficiency reasons.
The next thing to add to my project is the coloring of the spheres based on chemicals. This is trivial, but complicated since I am not sure that a "bound" should be created for the maximum brightness of any particular color based on the input chemicals. My plan is simply to sum the chemicals multiplied by coefficients for each color, then bring e to the power of the negative result. This will give me a value starting at 1 and approaching 0 as the chemicals increase. Then I will subtract this from 1 to receive the intensity of the color. I don't particularly like this solution, but it seems the be the best way to do it; I may even apply this to the inputs for the neural network.
No comments:
Post a Comment