양방향 연관 기억(Bidirectional associative memory, BAM)은 1988년 Bart Kosko가 도입한 순환 신경망의 한 유형이다. 이는 패턴을 이종 연관 방식으로 저장하는 연관 기억의 한 형태로, 한 계층의 패턴이 주어지면 다른 계층에서 해당하는 패턴을 검색할 수 있으며, 두 패턴의 크기는 다를 수 있다. 이는 홉필드 네트워크와 같은 자가 연관 기억과 대조되는데, 자가 연관 기억은 동일한 크기의 패턴을 반환한다. BAM은 입력 계층 또는 출력 계층 중 어느 쪽에서든 입력에 응답할 수 있으므로 양방향이며, 순방향 및 역방향 검색을 위해 가중치 행렬과 그 전치 행렬을 사용한다.
토폴로지
BAM은 X와 Y로 표시되는 두 개의 뉴런 계층으로 구성되며, 이들은 서로 완전히 연결된다. 가중치가 설정되면 X 계층에 입력을 제시하면 Y 계층에 패턴이 생성되고, 그 반대의 경우도 마찬가지이다. 연결은 양방향이다. X 계층에서 Y 계층으로 전송되는 가중치 행렬은 W로 표시되고, Y에서 X로의 신호에 대한 가중치 행렬은 전치 행렬 W^T이다. 따라서 가중치 행렬은 양방향으로 사용되어 대칭적 검색을 가능하게 한다.
학습
연관을 저장하려면 패턴을 먼저 양극 형태(1과 -1)로 변환한다. 예를 들어, 두 연관 A1:B1과 A2:B2를 저장할 때, A1 = (1, 0, 1, 0, 1, 0)이고 B1 = (1, 1, 0, 0)이면 양극 형태는 X1 = (1, -1, 1, -1, 1, -1)과 Y1 = (1, 1, -1, -1)이 된다. 마찬가지로, A2 = (1, 1, 1, 0, 0, 0)과 B2 = (1, 0, 1, 0)은 X2 = (1, 1, 1, -1, -1, -1)과 Y2 = (1, -1, 1, -1)이 된다. 가중치 행렬 M은 각 쌍의 외적의 합으로 계산된다: M = Σ X_i^T Y_i. 예를 들어, 이는 입력 및 출력 패턴 간의 상관 관계를 반영하는 2, 0, -2 등과 같은 항목을 가진 6x4 행렬을 생성한다.
검색
연관을 검색하려면 입력 패턴에 가중치 행렬을 곱한다. 예를 들어, A1(양극 형태)에 M을 곱하면 (4, 2, -2, -4)가 되고, 임계값(양수는 1, 음수는 0)을 적용하면 (1, 1, 0, 0)이 되며, 이는 B1이다. 역방향 연관은 출력 패턴에 M의 전치 행렬을 곱하여 얻을 수 있으며, Y에서 X로의 검색이 가능하다.
용량
BAM의 저장 용량은 min(m, n)으로 주어지며, 여기서 n은 X 계층의 유닛 수이고 m은 Y 계층의 유닛 수이다. 내부 가중치 행렬은 n x p의 독립적인 자유도를 가지며, 여기서 n은 첫 번째 벡터의 차원(예: 6)이고 p는 두 번째 벡터의 차원(예: 4)이다. 이를 통해 BAM은 최대 min(n, p)개의 독립적인 벡터 쌍을 안정적으로 저장하고 검색할 수 있다. 예를 들어, min(6, 4) = 4이다. 용량은 신뢰성을 희생하면서 이보다 더 늘릴 수 있으며, 출력에 잘못된 비트가 도입될 수 있다.
안정성
쌍 (A, B)는 BAM의 상태를 정의한다. 패턴이 저장되려면 에너지 함수 값이 에너지 경관에서 최솟값을 차지해야 한다. Kosko는 양방향 경우에 대해 Lyapunov(에너지) 함수 E(A, B) = -A M B^T를 제안했다. 쌍 패턴이 제시되면 뉴런은 양방향으로 안정된 상태 (A_f, B_f)에 도달할 때까지 상태를 변경하며, Kosko는 이것이 에너지 함수의 지역 최솟값에 해당함을 증명했다. 이산 BAM은 안정된 상태로 수렴하는 것이 보장된다. A = B인 특수한 경우, 에너지 함수는 E(A, A) = -A M A^T로 축소되며, 이는 홉필드 네트워크의 자가 연관 에너지 함수와 일치한다.