Wednesday, September 23, 2009

The Mind of the Machine


Last time I acknowledged that I thought that Hofstadter’s idea of creating an anagram solving machine that would solve problems in its domain with a human’s though processes in mind was in itself a flawed idea. I thought that because there would always be faster, more powerful, or more accurate brute force systems out there that Hofstadter’s JUMBO was little more than an, albeit interesting, curiosity. However, in this chapter the writer defends his idea for developing JUMBO the way that he did.

Hofstadter’s program come in stark contrast with a brute force program that would simply look at a large list of possible words from the dictionary. Instead JUMBO does something more intuitive, more human like; it takes letters and groups them together just like a human does to form pseudo-English words, or combinations that aren’t really words but look like they could be. He got this idea by observing his own thought processes while doing an anagram, indeed his brain would subconsciously group together letters that looked like they could fit next to each other, and eventually he would come across the most probable, if not only, solution.

Obviously looking at problem from a Cognitive Science viewpoint can drastically change your method of solving it. In the case above not only did Hofstadter manage to create a system that would do exactly what it needed to, but he created a system that would do it in an interesting and insightful way. That is the power of thinking outside the box and modeling programs after the human brain, after all the human brain IS the greatest computer ever built.

Monday, September 21, 2009

Jumbo versus brute force/Bombers curve jutes four

Anagrams are really really neat for several reasons. First off, I think it is really interesting how by just looking at some words our brains will automatically pick out the letters, reverse them, manipulate them, until in our heads we can picture several words. Many of us have, I am sure, tried to find different anagrams for our names (Craig Graci... hmmm?) so when Hofstadter wrote that he has designed a program, Jumbo, to solve anagrams I thought that that was a really neat idea. But his program was slow compared to similar brute force programs, and I began to wonder why. If his program was meant to mimic human consciousness, I would think that it would be rather fast, given that Hofstadter himself said that (for small words at least) he was able to find quite a few anagrams within seconds.

Obviously we don't have hardware that can match the power of the human brain, but when we do, if we were able to mimic the human consciousness/unconsciousness exactly, as it relates to solving anagrams, then we would have a very powerful system indeed. But I still doubt that it would beat the speed of a brute force algorithm that could check given letter against all the words in an unabridged dictionary in mere moments. This makes me think that while trying to emulate the human brain for all tasks can be really cool, and good for learning more about how we think, in practice it's not AS reasonable. So even in the future I don't think that, given the choice, the industry will always pick the program that mimics a human's thought process. Hofstadter writes about brute force algorithms and such as if they are inconsequential, but in reality they will most likely always be a part of our software society.

Wednesday, September 16, 2009

Generalization

"Generalization in human thought is far, far richer than mere substitution of variables for constants." (Page 77)

Once again Hofstadter is pointing out the complexities of the average human brain vs. the world's most powerful computers. Even today, with technology increasing at an alarming rate and processing power of computers going up every day human level computing power is still very likely 20+ years away. Knowing this, we need to come up with systems that can simulate human intelligence without necessarily need the same level of processing power that the human brain actually has. Obviously, this is a daunting task. So when it comes to Generalizations, and getting computers to make them, we need to define the ability to make generalizations.

Hofstadter does just this defining several points that make up the concept of generalization. I wonder though, exactly how we can really know everything the Human brain does during the process of generalizations. Because the thought processes behind generalization are so, so complicated, I wonder if we will ever truly understand everything that goes into it. If we do, I wonder exactly how powerful we could make computer programs for generalization then. Perhaps it would even be possible to streamline, optimize the process. Perhaps as AI gets more and more sophisticated the best generalizers in the world will no longer be humans, but machines, but not before we understand everything that goes into it i the human mind.

Monday, September 14, 2009

Pattern Finding and Human Perception

In today’s reading of Fluid Concepts and Creative Analogies, Hofstadter continues his discussion on patterns and pattern finding.  He mentions that in partern finding it is useful to find “islands of order”, or short steretches that seem like they make sense, or have their own internal logic. There are four types of these islands that he discussed:

-          Plateaus such as “44” and “111”
-          Up runs such as “12” and “456”
-          Down runs such as “21” and “654”
-          And lastly, palindromes, such as “5885” and “71617”

Of these islands palindromes are, naturally, the hardest to detect because they require you to span long distances in the sequence. In fact, some people may not even recognize very long palindrome when they see them such as “5824716396543219878912345693617425” and instead would look for other paterns within the palindrome such as the up-run “123.”

Because there are different types of patterns to be recognized, simply looking for one type of pattern and then another and then another would be inefficient and would, indeed, not work at all for given situations. It would only be a slightly modified version of a brute-force depth-first search, which is not how humans distinguish patterns.

Hofstadter instead employs a method of search with “parallel processing with probabilistic bias.” I think this is a very interesting idea for several reasons, the first being that as the writer goes on it become apparent that with a bit of fine tuning this can indeed work. The second is because I really feel like is much closer to how humans match patterns, they look at the entire string at the same time and try to pick out piece that are more likely to result in a pattern. Humans are already really good at pattern finding, so it makes sense to me to model a pattern finding program off of human perception.

Wednesday, September 9, 2009

A powerful tool

Math is such a powerful tool for a Computer Programmer. However, as Hofstadter writes it can often be used for an expert system and when you have an expert system you can sometimes substitute that for a powerful intelligence. However, this is true only if you believe that intelligence is just knowledge, knowledge, and more knowledge, wrapped up in a package that allows it to be accessed. I personally do not believe this, rather choosing not to define intelligence at all (and in fact there isn’t a widely agreed upon definition.) However, if I did have to put a definition I would probably say that intelligence is more like knowledge and the knowledge about how to use it.

When using Math as a tool, especially as knowledge in a system, it is important to understand that it is not the only thing necessary however it can powerful, and rather neat. I found the example of calculated e as a simple continued fraction to be very interesting. As well, it could be used for a variety of projects that I can think of. I hope to be able to program a few expert systems later in this class, and eventually some other forms of representing knowledge.

Monday, September 7, 2009

Fluid Concepts 1-35

For much of these first pages Hofstadter writes about integer sequences. I found this interesting, in particular, the idea that these sequences could possibly be recursive, or describe themselves. He also writes about how computer programs can be developed to test whether these recursive structures hold true out to thousands or even hundreds of thousands of integers. I think that this is a really cool idea and I would like to program such a script. Possibly by using the Prolog language, as it is particularly good at recursion.

These programs can then be expanded to test very complex integer sequences or even create these sequences by themselves. As Hofstadter wrote he challenged himself with building a thinking machine that would be able to preform such a task for a wide variety of integer sequences. The concept behind building a thinking machine is one that needs a lot of planning and forethought, and one that needs to be refined over time. Eventually though a machine could be build, a program could be written that would calculate a large number of recursive integer sequences. If a machine can be "taught to think" in this fashion, could it to be taught to preform more complex tasks and even emulate human intelligence?