In the typical application of weights in a neural network, a weighting value is sequentially applied until an acceptable matching value is realized.
For example: A weighting value is iterated from zero (0) to twenty (20) with the optimal match being achieved at a weighting value of fourteen (14) when applied.
This equates to a minimum of fifteen (15) processing cycles through the associated network and node to achieve the optimal match.
Bisecting the weighting range (lower & higher) in search of the optimal match would take four (4) processing cycles through the associated node to determine the same optimal match value of fourteen (14) – which reduces the compute time by an astounding seventy-two (72%) percent savings! The query response is delivered in approximately one-quarter (28%)of the time. The significance of this performance improvement is further realized when the expense of upgrading hardware to increase throughput is considered.
It is important to note, the XCaliber Networks implementation of the Artificial Neural Network (ANN) extends the technology and provides for multiple sets of weights (Weight Sets) which can be dynamically indexed and applied. This works well when Output Exceptions are raised triggering a Backward Propagation to adjust the weights and re-run the network. This backward propagation and re-adjustment is typically repeated until a desired output is determined. Generally, a Weight Set consists of values that are not necessarily adjacent to one another and have ‘”learned values” which were stored after successfully producing matches in similar query constructs and scenarios. Likewise, the Bias Values are organized as an indexed set of biases which can be dynamically selected, assigned and applied.
Function: setParms(Ident,Initial Weight, Beginning Range, Ending Range, Increment, Decrement);
Example:
xWeight.setParms("Ident",0.0,1.0,20.0,1.0,1.0);
Ident | Weight Identifier. |
Initial Weight Value | 0.0 |
Beginning Range | 1.0 |
Ending Range | 20.0 |
Increment Value | 1.0 |
Decrement Value | 1.0 |
Function: bisection();
Returns: Double Word
Example:
weight = xWeight.bisection();
Here is the performance comparison between the standard sequential weighting and the bisectional indexing method of weight application. It requires fifteen (15) sequential comparisons to realize the desired output value of 1.0 – and only four (4) comparisons when using the bisection function.
Sequential | Higher/Lower | Bisection | Node Output |
Increment | ↑ or ↓ | Index | Result |
0.0 | ↑ | 0.10 | |
1.0 | ↑ | 0.15 | |
2.0 | ↑ | 0.20 | |
3.0 | ↑ | 0.25 | |
4.0 | ↑ | 0.30 | |
5.0 | ↑ | 0.35 | |
6.0 | ↑ | 0.40 | |
7.0 | ↑ | 0.45 | |
8.0 | ↑ | 0.50 | |
9.0 | ↑ | 0.55 | |
10.0 | ↑ | Comparison #1 | 0.60 |
11.0 | ↑ | 0.65 | |
12.0 | ↑ | 0.70 | |
13.0 | ↑ | Comparison #3 | 0.90 |
14.0 | Matched | Comparison #4 | 1.00 |
15.0 | ↓ | Comparison #2 | 1.15 |
16.0 | ↓ | 1.16 | |
17.0 | ↓ | 1.17 | |
18.0 | ↓ | 1.18 | |
19.0 | ↓ | 1.19 | |
20.0 | ↓ | 1.20 | |