# 2D SONN algorithm with decremental gain

Here’s a simple algorithm to produce Self-organizing neural networks (SONN) in 2D clustering problems with a simple decremented gain.

Number of clusters of input data x represented by $N_n\times N_m$, and $N_F$ is the number of features in each cluster. To represent the amount of change in the weights as a function of the distance from the center cluster $(n_0,m_0)$, here I use window function $\lambda$, and the goal is to decrement the gain $g(t+1)$ for updating the weights at next step iteration.

Step 1 : set the weight in all clusters to random values :

$w_i^{m,n}=random$,

for $n=0,1,2,...,N_n$; $m=0,1,2,...,N_m$; and $i=0,1,2,...,N_F$

Set the initial gain $g(0)=1$.

Step 2 : For each input pattern

$x^t,$ where $t = 1, 2, ...., k$,

(a). Identify the cluster that is closest to to the k-th input  :

$(n_0, m_0)=\displaystyle min_{j,l} {||x^k-w^{j,l}||}$.

(b). Update the weights of the clusters in the neighborhood of cluster $(n,m), N,$ according to the rule :

$w_i^{n,m}(t+1) \leftarrow w_i^{n,m}(t)+g(t)\lambda (n,m)[x_i^k-w_i^{n,m}(t)]$, for $(n,m) \in N$,

Where $\lambda(n,m)$ is window function.

Step 3 : Decrement the gain term used for adapting the weight :

$g(t+1)=\mu g(t)$,

where $\mu$ is the learning rate.

Step 4 : Repeat by going back to step 2 until convergence.

For the similar 1D SONN algorithm see here.

# SOINN Robot

This video shows the robot that uses a technology called SOINN (Self-Organising Incremental Neural Network)

The SOINN robot uses its past experiences to make an educated guess as to what to do. It does this by “self-organising the input data it is supplied with.” Here’s a recorded Java Applet of SOINN from Hasegawa Lab.

wired.co.uk : Robot taught to think for itself
ubergizmo.com : Robots that can learn and think for themselves
Hasegawa Lab. : SOINN-e and HasegawaLab’s Channel on YouTube

# Ekspresi Rekursif Algoritma BPNN

Di top pencarian saya temukan kata kunci tentang ekspresi rekursif yang secara eksplisit dinyatakan oleh persamaan (10) pada posting saya sebelumnya tentang algoritma BPNN (backpropagation neural networks). Algoritama tersebut, seperti yang telah saya tulis, menggunakan metode gradient descent, namun untuk penurunan rumusnya dalam konteks struktur algoritma pembelajaran jaringan backpropagation, perlu pemahaman sedikit lebih dalam tentang persamaan diferensial parsial (PDE) termasuk pula aturan rantai (chain rule) di dalamnya. Metode ini bertujuan untuk meminimalkan error jaringan dengan cara memperbarui bobot $w$ di setiap langkah iterasi. Untuk itu diperlukan suatu ekspresi atau persamaan yang mengaitkan perubahan error $E$ di setiap layer, dimana nantinya didapat $E_{n+1}, seperti tampak pada gambar berikut :

Maka diperlukan rumus untuk ekspresi rekursif antara $\partial E/\partial x_{k}^{n}$, bobot $w$, fungsi transfer non-linier dari jumlah input di setiap layer ($s$), dan $\partial E/\partial x_{k}^{n+1}$, dimana simbol $k$ di sini menandai neuron pada layer ke-n atau ke-(n+1). Untuk mencari hubungan rekursif tersebut digunakan aturan rantai (chain rule) yang langkah-langkahnya adalah sebagai berikut.

Pertama, kita gali turunan parsial error yang mengacu kepada output neuron pada persamaan (9) di posting sebelumnya, yang dapat ditulis menjadi,

$\frac{\partial E}{\partial x_{m}^{n}}= \sum_{j=1}^{L}\frac{\partial E}{\partial s_{j}^{n+1}}\frac{\partial s_{j}^{n+1}}{\partial x_{m}^{n}},$ …. (1)

dan karena

$s_{j}^{n+1}= \sum_{i=1}^{N} w_{ij}^{n+1}x_{i}^{n}$ ….(2)

maka diperoleh

$\frac{\partial s_{j}^{n+1}}{\partial x_{m}^{n}}= w_{mj}^{n+1}.$ ….(3)

Dengan mensubstitusikan persamaan (3) ke persamaan (1) diperoleh :

$\frac{\partial E}{\partial x_{m}^{n}}= \sum_{j=1}^{L}\frac{\partial E}{\partial s_{j}^{n+1}}w_{mj}^{n+1}$ ….(4)

Karena $x_{j}^{n+1}=f\left ( s_{j}^{n+1} \right ),$ maka

$\frac{\partial E}{\partial s_{j}^{n+1}}= f'\left ( s_{j}^{n+1} \right ) \frac{\partial E}{\partial x_{j}^{n+1}}$….(5)

Dan akhirnya, dengan mensubstitusikan persamaan (5) ke dalam persamaan (4) diperoleh hubungan rekursif tersebut, yaitu :

$\frac{\partial E}{\partial x_{m}^{n}}= \sum_{j} w_{mj}^{n+1} f'\left ( s_{j}^{n+1} \right ) \frac{\partial E}{\partial x_{j}^{n+1}}$….(6)

Persamaan (6) ini menunjukan apa yang sedang kita bicarakan ini, yaitu bahwa $\partial E / \partial x_{m}^{n}$ bisa dinyatakan secara rekursif dengan melibatkan derivatif error terhadap output neuron pada layer berikutnya.