[妄想]アンチシンギュラリティ・BIスレ[ニート] [無断転載禁止]©2ch.net
根拠不明、科学の皮を被ったオカルト、シンギュラリティとニートの心の拠り所となっているBIのアンチスレです。 Page 47
activeDutyCycle(c)
抑制の後にカラムc がアクティブになった頻度を表す移動平均値
(例えば直近1000回繰り返した間に ry なった回数)
overlapDutyCycle(c)
カラムc がその入力に対して有意なオーバラップ値
(即ち、minOverlapより大きな値)になった頻度を表す移動平均値
(例えば直近1000回繰り返した間に ry なった回数)
minDutyCycle(c)
最小限望まれるセルの発火頻度 ry 頻度がこの値を下回れば、それはブーストされる。
この値はその付近のカラムの最大の発火頻度の1%として計算する。 以下の補助関数が疑似コードで ry
kthScore(cols, k)
与えられたカラムのリストに対して、k番目のオーバラップ値を返す
updateActiveDutyCycle(c)
抑制の後にカラムc がアクティブになった頻度の移動平均を計算する
updateOverlapDutyCycle(c)
カラムc のオーバラップ値がminOverlap より大きくなった頻度の移動平均 ry
averageReceptiveFieldSize()
カラムに接続された受容野の半径についての、すべてのカラムの平均値。
ry た受容野は接続されたシナプス(永続値≧connectedPermのもの)だけが含まれる。
これはカラム間の横方向の抑制範囲を決めるために用いられる。
maxDutyCycle(cols)
ry カラムのリストのうち、activeDutyCycle が最大のものを返す
increasePermanences(c, s)
カラムc のすべてのシナプスの永続値をスケール因子s に従って増加させる
boostFunction(c)
カラムc のブースト値 ry 値は1以上 ry 。
activeDutyCycle(c) が minDutyCycle(c) より大きければブースト値は1。
activeDutyCycle が minDutyCycle より下回り始めて以降は、ブースト値はリニアに増加する。 Page 48
第4章: 時間プーリングの実装と疑似コード
ry 時間プーリング関数53の最初の実装の疑似コード ry
ry 入力は空間プーリング関数で計算した activeColumns(t) である。
このコードは時刻 t における各セルのアクティブ状態及び予測状態を計算する。
アクティブ状態と予測状態の論理和が ry 出力 ry 、次のレベルの入力 ry
疑似コードは3つのフェーズ ry 順に実行 ry
ry 1: 各セルについてアクティブ状態 activeState(t) を計算する。
ry 2: 各セルについて予測状態 predictiveState(t) を計算する。
ry 3: シナプスを更新する。
ry 3 は学習するときにだけ必要 ry しかし ry 空間プーリングのときとは異なり、
学習が有効のときはフェーズ 1 と 2 も学習特有の操作をいくつか含んでいる。
時間プーリングは空間プーリングよりかなり複雑であるため、
先ずは時間プーリングの推論だけのバージョン ry 次に推論と学習を含む ry
。補助関数は疑似コードの後に、本章の最後に示す。
ry : 推論だけのバージョン
フェーズ 1
ry 各セルのアクティブ状態を計算する。勝者となった各カラムについて ry
。フィード・フォワード入力がいずれかのセルによって予測された
(即ち、前回の時刻ステップで順序セグメントによって predictiveState が 1 になった)
とき、それらのセルをアクティブにする(4-9 行目)。
フィード・フォワード入力が予測されなかった(どのセルも predictiveState がオンに
ならなかった)とき、そのカラムのすべてのセルをアクティブにする(11-13 行目)。
53 temporal pooler function Page 49
1. for c in activeColumns(t)
2.
3. buPredicted = false
4. for i = 0 to cellsPerColumn - 1
5. if predictiveState(c, i, t-1) == true then
6. s = getActiveSegment(c, i, t-1, activeState)
7. if s.sequenceSegment == true then
8. buPredicted = true
9. activeState(c, i, t) = 1
10.
11. if buPredicted == false then
12. for i = 0 to cellsPerColumn - 1
13. activeState(c, i, t) = 1 フェーズ 2
ry 各セルの予測状態を計算する。
セルのどれかのセグメントがアクティブになると、そのセルの predictiveState がオンになる。
即ち、十分な数の横方向の接続先が、
フィード・フォワード入力によって現在発火していればオンになる。
14. for c, i in cells
15. for s in segments(c, i)
16. if segmentActive(c, i, s, t) then
17. predictiveState(c, i, t) = 1
ry 疑似コード: 推論と学習を含むバージョン
フェーズ 1
ry 勝者となったカラム中の各セルの activeState を計算する。
ry カラムごとに一つのセルを学習セル (learnState)として選択する54。
そのロジックは以下の通り。
フィード・フォワード入力がいずれかのセルによって予測された
(即ち、順序セグメントによって predictiveState
54 lcChosen は学習セルが選択されたこと(learn cell chosen)を表し、
(c, i) が選択された学習セル、そして learnState(c, i, t) =1 に設定されることで
このセルが学習セルとして選択されたことを記憶する。 1. activeColumns( t ).each { | c |
2.
3. buPredicted = false # bottom-up ( P50 ) # フラグ ローカル
4. cellsPerColumn.times { | i | # 回数 : 各カラムのセルの数
5. if predictiveState( c , i , t - 1 ) # == true # 各セルの予測状態 ( P38 P43 P52 P62-63 )
6. s = getActiveSegment( c , i , t - 1 , activeState )
# segmentActive( s , t , state ) が真になるセグメント ry
# 順序セグメント ry なければ最もアクティビティが高 ry 優先
# activeState()
# カラム c セル i 時刻 t におけるアクティブ状態 ry
# 現在のフィードフォワード入力と過去の時間的文脈から ry
7. if s.sequenceSegment # == true # フラグ : インスタンス s ローカル ( 6. P52 )
. # if getActiveSegment( c , i , t - 1 , activeState ).sequenceSegment
8. buPredicted = true # ||=
9. activeState( c , i , t ) = 1 # ( 6. )
. # next
10. end
05. end
11. buPredicted || # == false
. # buPredicted && next # どの予測にも一致しな ry 何か普通でない ry ( P22 P29 P31 )
# フィードフォワード入力が予測されな ry 、そのカラムのすべてのセルをアクティブ ry ( P48 )
12. cellsPerColumn.times { | i |
13. activeState( c , i , t ) = 1
012. }
04. }
01. } Page 50
が 1 になった)とき55、それらのセルをアクティブにする(23-27 行目)。
そのセグメントが、learnState がオンのセルによってアクティブになった場合、
そのセルは学習セルとして選択される(28-30 行目)。フィード・フォワード入力が
予測されな ry 、そのカラムのすべてのセルをアクティブにする(32-34 行目)。
さらに、ベストマッチセルが学習セルとして選択され(36-41 行目)、
新しいセグメントがそのセルに追加される。 18. for c in activeColumns(t)
19.
20. buPredicted = false
21. lcChosen = false
22. for i = 0 to cellsPerColumn - 1
23. if predictiveState(c, i, t-1) == true then
24. s = getActiveSegment(c, i, t-1, activeState)
25. if s.sequenceSegment == true then
26. buPredicted = true
27. activeState(c, i, t) = 1
28. if segmentActive(s, t-1, learnState) then
29. lcChosen = true
30. learnState(c, i, t) = 1
31.
32. if buPredicted == false then
33. for i = 0 to cellsPerColumn - 1
34. activeState(c, i, t) = 1
35.
36. if lcChosen == false then
37. I,s = getBestMatchingCell(c, t-1)
38. learnState(c, i, t) = 1
39. sUpdate = getSegmentActiveSynapses (c, i, s, t-1, true)
40. sUpdate.sequenceSegment = true
41. segmentUpdateList.add(sUpdate)
55 buPredicted はフィード・フォワード入力が予測されたこと( bottom-up predicted)
を表す。(bottom-up は feed-forward と同義で、「フィード・フォワード」と ry )