Опубликован: 01.03.2007 | Доступ: свободный | Студентов: 1591 / 212 | Оценка: 4.58 / 4.39 | Длительность: 20:15:00
Специальности: Программист
Лекция 8:

Нейронные сети ассоциативной памяти

Для рассматриваемых сетей с ортогональным проектированием также возможно простое дообучение. На первый взгляд, это может показаться странным - если добавляемый эталон линейно независим от старых эталонов, то вообще говоря необходимо пересчитать матрицу Грамма и обратить ее. Однако симметричность матрицы Грамма позволяет не производить заново процедуру обращения всей матрицы. Действительно, обозначим через {\bf{G}}_m - матрицу Грамма для множества из m векторов x^i ; через {\bf{E}}_m - единичную матрицу размерности m \times m. При обращении матриц методом Гаусса используется следующая процедура:

  1. Запишем матрицу размерности m \times 2m следующего вида: \left( {{\bf{G}}_m \left| {{\bf{E}}_m } \right.} \right).
  2. Используя операции сложения строк и умножения строки на ненулевое число преобразуем левую квадратную подматрицу к единичной. В результате получим \left( {{\bf{E}}_m \left| {{\bf{G}}_m^{ - 1} } \right.} \right).

Пусть известна {\bf{G}}_m^{ - 1} - обратная к матрице Грамма для множества из m векторов x^i. Добавим к этому множеству вектор x^{m + 1}. Тогда матрица для обращения матрицы {\bf{G}}_{m + 1} методом Гаусса будет иметь вид:

\left( {\left. {\begin{array}{*{20}c}
   & & & {\left( {x^1 ,x^{m + 1} } \right)} \\
   & {{\bf{G}}_m } & & \vdots \\
   & & & {\left( {x^m ,x^{m + 1} } \right)} \\
  {\left( {x^1 ,x^{m + 1} } \right)} & \cdots  & {\left( {x^m ,x^{m + 1} } \right)} & {\left( {x^{m + 1} ,x^{m + 1} } \right)} \\
\end{array}} \right|{\bf{E}}_{m + 1} } \right)
.

После приведения к единичной матрице главного минора ранга m получится следующая матрица:

\left( {\left. {\begin{array}{*{20}c}
  & & & {b_1 } \\
  & {{\bf{E}}_m } & & \vdots \\
  & & & {b_m } \\
  {\left( {x^1 ,x^{m + 1} } \right)} & \cdots  & {\left( {x^m ,x^{m + 1} } \right)} & {\left( {x^{m + 1} ,x^{m + 1} } \right)} \\
\end{array}} \right|\begin{array}{*{20}c}
  & & & 0 \\
  & {{\bf{G}}_m^{ - 1} } & & \vdots \\
  & & & 0 \\
   0 & \cdots  & 0 & 1 \\
\end{array}} \right)
,

где b_i - неизвестные величины, полученные в ходе приведения главного минора к единичной матрице. Для завершения обращения матрицы {\bf{G}}_{m + 1} необходимо привести к нулевому виду первые m элементов последней строки и \left( {m + 1} \right) -о столбца. Для обращения в ноль i -о элемента последней строки необходимо умножить i -ю строку на \left( {x^i ,x^{m + 1} } \right) и вычесть из последней строки. После проведения этого преобразования получим

\left( {\left. {\begin{array}{*{20}c}
  & & & {b_1 } \\
  & {{\bf{E}}_m } & & \vdots \\
  & & & {b_m } \\
   0 & \cdots  & 0 & {b_0 } \\
\end{array}} \right|\begin{array}{*{20}c}
  & & & 0 \\
  & {{\bf{G}}_m^{ - 1} } & & \vdots \\
  & & & 0 \\
  {c_1 } & \cdots  & {c_m } & 1 \\
\end{array}} \right)
,

где

b_0 = \left( {x^{m + 1} , x^{m + 1} } \right) - \sum\limits_{i = 1}^m {\left( {x^i ,x^{m + 1} } \right)b_i } ,
c_i = - \sum\limits_{j = 1}^m {\left( {x^j ,x^{m + 1} } \right){\bf{G}}_{m,ji}^{ - 1} } .
b_0 = 0 только если новый эталон является линейной комбинацией первых m эталонов. Следовательно b_0 \ne 0. Для завершения обращения необходимо разделить последнюю строку на b_0 и затем вычесть из всех предыдущих строк последнюю, умноженную на соответствующее номеру строки b_i. В результате получим следующую матрицу

\left( {\left. {\begin{array}{*{20}c}
  & & & 0 \\
  & {{\bf{E}}_m } & & \vdots \\
  & & & 0 \\
   0 & \cdots  & 0 & 1 \\
\end{array}} \right|\begin{array}{*{20}c}
  & & & { - {{b_1 } \mathord{\left/
 {\vphantom {{b_1 }{b_0 }}} \right.
 \kern-\nulldelimiterspace}{b_0 }}} \\
  & {\bf{F}} & & \vdots \\
  & & & { - {{b_m } \mathord{\left/
 {\vphantom {{b_m }{b_0 }}} \right.
 \kern-\nulldelimiterspace}{b_0 }}} \\
  {{{c_1 } \mathord{\left/
 {\vphantom {{c_1 }{b_0 }}} \right.
 \kern-\nulldelimiterspace}{b_0 }}} & \cdots  & {{{c_m } \mathord{\left/
 {\vphantom {{c_m }{b_0 }}} \right.
 \kern-\nulldelimiterspace}{b_0 }}} & {{1 \mathord{\left/
 {\vphantom {1 {b_0 }}} \right.
 \kern-\nulldelimiterspace}{b_0 }}} \\
\end{array}} \right)
,

где {\bf{F}}_{ij} = {\bf{G}}_{m,ij}^{ - 1} - {{b_i c_j }{\left/ {b_0 } \right }}. Поскольку матрица, обратная к симметричной, всегда симметрична получаем {{c_i }{\left/ {b_0 } \right }} = {{ - b_i }{\left/ {b_0 } \right }} при всех i. Так как b_0 \ne 0 следовательно b_i = - c_i.

Обозначим через {\bf{d}} вектор

\left( {\left( {x^1 ,x^{m + 1} } \right), \ldots ,\left( {x^m ,x^{m + 1} } \right)} \right),
через {\bf{b}} - вектор \left( {b_1 , \ldots ,b_m } \right). Используя эти обозначения можно записать
{\bf{b}} = {\bf{G}}_m^{ - 1}{\bf{d}},{\rm{ }}b_0 = \left( {x^{m + 1} ,x^{m + 1} } \right) - \left( {{\bf{d}},{\bf{b}}} \right).
Матрица {\bf{G}}_{m + 1}^{ - 1} записывается в виде

{\bf{G}}_{m + 1}^{ - 1} = \frac{1}{{b_0 }}\left( {\begin{array}{*{20}c}
  {b_0 {\bf{G}}_m^{ - 1} + {\bf{b}} \otimes {\bf{b}}} & { - {\bf{b}}} \\
  { - {\bf{b}}} & {\bf{1}} \\
\end{array}} \right)
.

Таким образом, при добавлении нового эталона требуется произвести следующие операции:

  1. Вычислить вектор {\bf{d}} ( m скалярных произведений - mn операций, mn \le n^2 ).
  2. Вычислить вектор {\bf{b}} (умножение вектора на матрицу - m^2 операций).
  3. Вычислить b_0 (два скалярных произведения - m + n операций).
  4. Умножить матрицу на число и добавить тензорное произведение вектора {\bf{b}} на себя ( 2m^2 операций).
  5. Записать {\bf{G}}_{m + 1}^{ - 1}.

Таким образом, эта процедура требует m + n + mn + 3m^2 операций. Тогда как стандартная схема полного пересчета потребует:

  1. Вычислить всю матрицу Грамма ( n{{m\left( {m + 1} \right)} \mathord{\left/ {\vphantom {{m\left( {m + 1} \right)} 2}} \right. \kern-\nulldelimiterspace} 2} операций).
  2. Методом Гаусса привести левую квадратную матрицу к единичному виду ( 2m^3 операций).
  3. Записать {\bf{G}}_{m + 1}^{ - 1}.

Всего {{2m^3 + nm\left( {m + 1} \right)} \mathord{\left/ {\vphantom {{2m^3 + nm\left( {m + 1} \right)} 2}} \right.
 \kern-\nulldelimiterspace} 2} операций, что в m
раз больше.

Используя ортогональную сеть (6), удалось добиться независимости способности сети к запоминанию и точному воспроизведению эталонов от степени скоррелированности эталонов. Так, например, ортогональная сеть смогла правильно воспроизвести все буквы латинского алфавита в написании, приведенном на рис. 8.1.

У сети (6) можно выделить два основных недостатка:

  1. Число линейно независимых эталонов должно быть меньше размерности системы n.
  2. Неинвариантностью - если два визуальных образа отличаются только своим положением в рамке, то в большинстве задач желательно объединять их в один эталон.

Оба этих недостатка можно устранить, изменив выбор весовых коэффициентов в (2).