Mercurial > cortex
comparison thesis/cortex.org @ 536:0b0fef5e817b
more clarification.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 27 Apr 2014 20:39:33 -0400 |
parents | 8a5abd51cd4f |
children | bc5eb476693a |
comparison
equal
deleted
inserted
replaced
535:8a5abd51cd4f | 536:0b0fef5e817b |
---|---|
2944 (set (some #(% proprio-data) lookups))))) | 2944 (set (some #(% proprio-data) lookups))))) |
2945 #+end_src | 2945 #+end_src |
2946 #+end_listing | 2946 #+end_listing |
2947 | 2947 |
2948 #+caption: =longest-thread= finds the longest path of consecutive | 2948 #+caption: =longest-thread= finds the longest path of consecutive |
2949 #+caption: experiences to explain proprioceptive worm data from | 2949 #+caption: past experiences to explain proprioceptive worm data from |
2950 #+caption: previous data. Here, the film strip represents the | 2950 #+caption: previous data. Here, the film strip represents the |
2951 #+caption: creature's previous experience. Sort sequences of | 2951 #+caption: creature's previous experience. Sort sequences of |
2952 #+caption: memories are spliced together to match the | 2952 #+caption: memories are spliced together to match the |
2953 #+caption: proprioceptive data. Their carry the other senses | 2953 #+caption: proprioceptive data. Their carry the other senses |
2954 #+caption: along with them. | 2954 #+caption: along with them. |
2965 rest period by looping the one second rest chain five times. | 2965 rest period by looping the one second rest chain five times. |
2966 | 2966 |
2967 =longest-thread= takes time proportional to the average number of | 2967 =longest-thread= takes time proportional to the average number of |
2968 entries in a proprioceptive bin, because for each element in the | 2968 entries in a proprioceptive bin, because for each element in the |
2969 starting bin it performs a series of set lookups in the preceding | 2969 starting bin it performs a series of set lookups in the preceding |
2970 bins. If the total history is limited, then this is only a constant | 2970 bins. If the total history is limited, then this takes time |
2971 multiple times the number of entries in the starting bin. This | 2971 proprotional to a only a constant multiple of the number of entries |
2972 analysis also applies even if the action requires multiple longest | 2972 in the starting bin. This analysis also applies, even if the action |
2973 chains -- it's still the average number of entries in a | 2973 requires multiple longest chains -- it's still the average number |
2974 proprioceptive bin times the desired chain length. Because | 2974 of entries in a proprioceptive bin times the desired chain length. |
2975 =longest-thread= is so efficient and simple, I can interpret | 2975 Because =longest-thread= is so efficient and simple, I can |
2976 worm-actions in real time. | 2976 interpret worm-actions in real time. |
2977 | 2977 |
2978 #+caption: Program to calculate empathy by tracing though \Phi-space | 2978 #+caption: Program to calculate empathy by tracing though \Phi-space |
2979 #+caption: and finding the longest (ie. most coherent) interpretation | 2979 #+caption: and finding the longest (ie. most coherent) interpretation |
2980 #+caption: of the data. | 2980 #+caption: of the data. |
2981 #+name: longest-thread | 2981 #+name: longest-thread |
3013 There is one final piece, which is to replace missing sensory data | 3013 There is one final piece, which is to replace missing sensory data |
3014 with a best-guess estimate. While I could fill in missing data by | 3014 with a best-guess estimate. While I could fill in missing data by |
3015 using a gradient over the closest known sensory data points, | 3015 using a gradient over the closest known sensory data points, |
3016 averages can be misleading. It is certainly possible to create an | 3016 averages can be misleading. It is certainly possible to create an |
3017 impossible sensory state by averaging two possible sensory states. | 3017 impossible sensory state by averaging two possible sensory states. |
3018 Therefore, I simply replicate the most recent sensory experience to | 3018 For example, consider moving your hand in an arc over your head. If |
3019 fill in the gaps. | 3019 for some reason you only have the initial and final positions of |
3020 this movement in your \Phi-space, averaging them together will | |
3021 produce the proprioceptive sensation of having your hand /inside/ | |
3022 your head, which is physically impossible to ever experience | |
3023 (barring motor adaption illusions). Therefore I simply replicate | |
3024 the most recent sensory experience to fill in the gaps. | |
3020 | 3025 |
3021 #+caption: Fill in blanks in sensory experience by replicating the most | 3026 #+caption: Fill in blanks in sensory experience by replicating the most |
3022 #+caption: recent experience. | 3027 #+caption: recent experience. |
3023 #+name: infer-nils | 3028 #+name: infer-nils |
3024 #+begin_listing clojure | 3029 #+begin_listing clojure |
3077 :experiences experiences}))) | 3082 :experiences experiences}))) |
3078 @experiences)) | 3083 @experiences)) |
3079 #+end_src | 3084 #+end_src |
3080 #+end_listing | 3085 #+end_listing |
3081 | 3086 |
3082 #+caption: Use longest thread and a phi-space generated from a short | 3087 #+caption: Use =longest-thread= and a \Phi-space generated from a short |
3083 #+caption: exercise routine to interpret actions during free play. | 3088 #+caption: exercise routine to interpret actions during free play. |
3084 #+name: empathy-debug | 3089 #+name: empathy-debug |
3085 #+begin_listing clojure | 3090 #+begin_listing clojure |
3086 #+begin_src clojure | 3091 #+begin_src clojure |
3087 (defn init [] | 3092 (defn init [] |
3100 (cond | 3105 (cond |
3101 (grand-circle? empathy) (.setText text "Grand Circle") | 3106 (grand-circle? empathy) (.setText text "Grand Circle") |
3102 (curled? empathy) (.setText text "Curled") | 3107 (curled? empathy) (.setText text "Curled") |
3103 (wiggling? empathy) (.setText text "Wiggling") | 3108 (wiggling? empathy) (.setText text "Wiggling") |
3104 (resting? empathy) (.setText text "Resting") | 3109 (resting? empathy) (.setText text "Resting") |
3105 :else (.setText text "Unknown"))))))) | 3110 :else (.setText text "Unknown"))))))) |
3106 | 3111 |
3107 (defn empathy-experiment [record] | 3112 (defn empathy-experiment [record] |
3108 (.start (worm-world :experience-watch (debug-experience-phi) | 3113 (.start (worm-world :experience-watch (debug-experience-phi) |
3109 :record record :worm worm*))) | 3114 :record record :worm worm*))) |
3110 #+end_src | 3115 #+end_src |
3111 #+end_listing | 3116 #+end_listing |
3117 | |
3118 These programs create a test for the empathy system. First, the | |
3119 worm's \Phi-space is generated from a simple motor script. Then the | |
3120 worm is re-created in an environment almost exactly identical to | |
3121 the testing environment for the action-predicates, with one major | |
3122 difference : the only sensory information available to the system | |
3123 is proprioception. From just the proprioception data and | |
3124 \Phi-space, =longest-thread= synthesises a complete record the last | |
3125 300 sensory experiences of the worm. These synthesized experiences | |
3126 are fed directly into the action predicates =grand-circle?=, | |
3127 =curled?=, =wiggling?=, and =resting?= from before and their output | |
3128 is printed to the screen at each frame. | |
3112 | 3129 |
3113 The result of running =empathy-experiment= is that the system is | 3130 The result of running =empathy-experiment= is that the system is |
3114 generally able to interpret worm actions using the action-predicates | 3131 generally able to interpret worm actions using the action-predicates |
3115 on simulated sensory data just as well as with actual data. Figure | 3132 on simulated sensory data just as well as with actual data. Figure |
3116 \ref{empathy-debug-image} was generated using =empathy-experiment=: | 3133 \ref{empathy-debug-image} was generated using =empathy-experiment=: |
3190 accuracy on manual testing of the worm using =init-interactive= and | 3207 accuracy on manual testing of the worm using =init-interactive= and |
3191 =test-empathy-accuracy=. The majority of errors are near the | 3208 =test-empathy-accuracy=. The majority of errors are near the |
3192 boundaries of transitioning from one type of action to another. | 3209 boundaries of transitioning from one type of action to another. |
3193 During these transitions the exact label for the action is more open | 3210 During these transitions the exact label for the action is more open |
3194 to interpretation, and disagreement between empathy and experience | 3211 to interpretation, and disagreement between empathy and experience |
3195 is more excusable. | 3212 is essentially irrelevant at this point, giving a practical |
3196 | 3213 identification accuracy of even higher than 95%. When I watch this |
3197 ** COMMENT Digression: Learn touch sensor layout through free play | 3214 system myself, I generally see no errors in action identification. |
3215 | |
3216 ** COMMENT Digression: Learning touch sensor layout through free play | |
3198 | 3217 |
3199 In the previous section I showed how to compute actions in terms of | 3218 In the previous section I showed how to compute actions in terms of |
3200 body-centered predicates which relied on the average touch | 3219 body-centered predicates which relied on the average touch |
3201 activation of pre-defined regions of the worm's skin. What if, | 3220 activation of pre-defined regions of the worm's skin. What if, |
3202 instead of receiving touch pre-grouped into the six faces of each | 3221 instead of receiving touch pre-grouped into the six faces of each |