フェーズ 2 ry 各セルの予測状態を計算する。セルのどれかのセグメントがアクティブになると、 そのセルの predictiveState がオンになる。 即ち、十分な数の横方向の接続先が、フィード・フォワード入力によって現在アクティブ であればオンになる。この場合、そのセルは以下の変更を待ち行列に加える: a) 現在アクティブなセグメントを強化56する(47-48 行目)、 b) このアクティベーション57を予測し得たセグメント (即ち、前回の時刻ステップでアクティビティに(弱いかも ry )マッチしたセグメント) を強化する(50-53 行目)。
42. for c, i in cells 43. for s in segments(c, i) 44. if segmentActive(s, t, activeState) then 45. predictiveState(c, i, t) = 1 46. 47. activeUpdate = getSegmentActiveSynapses(c, i, s, t, false) 48. segmentUpdateList.add(activeUpdate) 49. 50. predSegment = getBestMatchingSegment(c, i, t-1) 51. predUpdate = getSegmentActiveSynapses( 52. c, i, predSegment, t-1, true) 53. segmentUpdateList.add(predUpdate) 000762017/04/09(日) 09:27:16.04ID:XXlcdpGX フェーズ 3 ry 実際に学習を実施する。 待ち行列に追加されたセグメントの更新は、フィード・フォワード入力を得てセルが 学習セルとして選択されたときに実施される(55-57 行目)。 そうではなく、もしセルが何らかの理由で予測を停止した場合、 そのセグメントをネガティブ58に強化する(58-60 行目)。
54. for c, i in cells 55. if learnState(s, i, t) == 1 then 56. adaptSegments (segmentUpdateList(c, i), true) 57. segmentUpdateList(c, i).delete() 58. else if predictiveState(c, i, t) == 0 and predictiveState(c, i, t-1)==1 then 59. adaptSegments (segmentUpdateList(c, i), false) 60. segmentUpdateList(c, i).delete() 61. 0012112017/04/16(日) 11:29:05.95ID:kNc73pc9 実装の詳細と用語説明
ry 。各セルは二つの数値でアクセスする。カラムの添字 c と、セルの添字 i である。 セルは樹状突起セグメントのリストを保持する。各セグメントはシナプスのリストと、 各シナプスごとに永続値を保持する。 ry 変更は、セルが フィード・フォワード入力によってアクティブになるまでは一時的とマークされ ry segmentUpdateList によって保持される。 各セグメントはまた、論理値のフラグsequenceSegment を保持する。 これはそのセグメントが次の時刻ステップにおけるフィード・フォワード入力 を予測するかどうかを示している。
シナプス候補の実装は空間プーリングの実装とは異なっている。 空間プーリングでは、シナプス候補の完全なリストが明示的に示される。 時間プーリングでは各セグメントが固有のシナプス候補の(ときには大きな)リスト を保持することができる。実際には各セグメントごとに大きなリスト ry は、計算量 ry メモリ消費 ry 。そこで ry 時間プーリングでは学習の際に各セグメントごとに アクティブなシナプスをランダムに追加する(newSynapseCount パラメータで制御する)。 ry 候補のリスト ry と同様の効果があり、しかも新たな時間的パターンを学習でき ry リストはずっと小さくなる。