
My journey to coming here today started in 1974. That 's me with the funny gloves . I was 17 and going on a peace walk . What I did n't know though , was most of those people , standing there with me , were Moonies . ( Laughter ) And within a week I had come to believe that the second coming of Christ had occurred , that it was Sun Myung Moon , and that I had been specially chosen and prepared by God to be his disciple . Now as cool as that sounds , my family was not that thrilled with this . ( Laughter ) And they tried everything they could to get me out of there . There was an underground railroad of sorts that was going on during those years . Maybe some of you remember it . They were called deprogrammers . And after about five long years my family had me deprogrammed . And I then became a deprogrammer . I started going out on cases . And after about five years of doing [ deprogramming ] I was arrested for kidnapping . Most of the cases I went out on were called involuntary . What happened was that the family had to get their loved ones some safe place somehow . And so they took them to some safe place . And we would come in and talk to them , usually for about a week . And so after [ the arrest ] happened I decided it was a good time to turn my back on this work . And about 20 years went by . There was a burning question though that would not leave me . And that was , " How did this happen to me ? " And in fact , what did happen to my brain ? Because something did . And so I decided to write a book , a memoir , about this decade of my life . And toward the end of writing that book there was a documentary that came out . It was on Jonestown . And it had a chilling effect on me . These are the dead in Jonestown . About 900 people died that day . Most of them taking their own lives . Women gave poison to their babies , and watched foam come from their mouths as they died . The top picture is a group of Moonies that have been blessed by their messiah . Their mates were chosen for them . The bottom picture is Hitler youth . This is the leg of a suicide bomber . The thing I had to admit to myself , with great repulsion , was that I get it . I understand how this could happen . I understand how someone 's brain , how someone 's mind can come to the place where it makes sense , in fact it would be wrong , when your brain is working like that , not to try to save the world through genocide . And so what is this ? How does this work ? And how I 've come to view what happened to me is a viral memetic infection . For those of you who are n't familiar with memetics , a meme has been defined as an idea that replicates in the human brian and moves from brain to brain like a virus , much like a virus . The way a virus works is -- it can infect and do the most damage to someone who has a compromised immune system . In 1974 , I was young , I was naive , and I was pretty lost in my world . I was really idealistic . These easy ideas to complex questions are very appealing when you are emotionally vulnerable . What happens is that circular logic takes over . " Moon is one with God . God is going to fix all the problems in the world . All I have to do is humbly follow . Because God is going to stop war and hunger -- all these things I wanted to do . All I have to do is humbly follow . Because after all , God is [ working through ] the messiah . He 's going to fix all this . " It becomes impenetrable . And the most dangerous part of this is that is creates " us " and " them , " " right " and " wrong , " " good " and " evil . " And it makes anything possible . Makes anything rationalizable . And the thing is , though , if you looked at my brain during those years in the Moonies -- Neuroscience is expanding exponentially , as Ray Kurzweil said yesterday . Science is expanding . We 're beginning to look inside the brain . And so if you looked at my brain , or any brain that 's infected with a viral memetic infection like this , and compared it to anyone in this room , or anyone who uses critical thinking on a regular basis , I am convinced it would look very , very different . And that , strange as it may sound , gives me hope . And the reason that gives me hope is that the first thing is to admit that we have a problem . But it 's a human problem . It 's a scientific problem , if you will . It happens in the human brain . There is no evil force out there to get us . And so this is something that , through research and education , I believe that we can solve . And so the first step is to realize that we can do this together , and that there is no " us " and " them . " Thank you very much . ( Applause ) 