The perceptron is a model of computation that draws inspiration from the physiology of neurons. While individually not as powerful as a Turing machine, when linked together in networks perceptrons are turing complete. They were invented by Frank Rosenblatt as the AI analog to human neurons [1] back when people thought artificial intelligence was about replicating human intelligence in machine form. They're still useful today in image processing — GIMP, Photoshop, and most other digital image editors implement them in some of their filtering algorithms.
The simplest perceptron consists of a single input channel and a trigger that fires when a certain threshold has been reached. A somewhat sad example of a single-channel perceptron is a speaker system: it takes an electronic signal from a CD player or whatever and amplifies it so that it can be heard from three blocks away. The output of this audial perceptron is not the music, but what happens if the amplifier pushes the volume beyond the limits of the speakers: they blow up, sending you the "signal" that it's time to stop bothering your neighbors so much.
Mathematically, this sort of perceptron fires whenever the amplified input is greater than the threshold. Let's call w the amount of amplification, I the signal on the input channel and t the threshold of the perceptron. Then the perceptron fires whenever wI ≥ t. This seems rather trivial, but from here it's possible to generalize the perceptron to multiple input channels.
When modeling a neuron or a sensory organ, it doesn't make much sense to say that there's only one input channel. The eye sees a great deal of raw data — best estimate is around 10,000,000 bits/sec [2]. It's not too much of a stretch to hypothesize that each rod and cone on the retina represents a separate input channel.* A perceptron here might draw upon the inputs of multiple channels before deciding whether or not to fire.
The simplest way to make a binary decision (to fire, or not to fire) based on multiple inputs is by democracy: assuming the inputs all have similar strength distributions**, average the inputs together, and then fire if the average is greater than threshold. To model more complex behavior, we might weigh each input channel differently when considering the average, in the same way that we value the presence of a dot more than the presence of a crossbar in deciding whether or not a given letter is a lowercase j.
The most general perceptron of this kind has several input channels (In), each with a corresponding weight or amplification factor (wn). If we treat the two as vectors, the perceptron fires whenever w ⋅ I ≥ t. This sort of perceptron has been useful in some machine vision problems: mostly edge finding and other geometry problems like that. More sophisticated approaches — networks of perceptrons — tend to be required for anything more complicated than that, like face or handwriting recognition.
It also has some applications to logic, namely a branch called threshold logic that studies how powerful the perceptron model is in doing logical operations when compared to other computational models. For instance, the NOT-gate can be modeled as a perceptron with one input channel (weight -1) and a threshold of zero. (We're assuming that the inputs are bipolar, i.e., either one or zero. Fuzzy logic can be done by accepting values inbetween.) The AND-gate is a perceptron with two input channels, both given half weight, with a threshold of one. And the OR-gate is a perceptron with two input channels of normal weight, with a threshold of one.
Knowing this, we know that perceptron networks are just as powerful as propositional logic. But individual perceptrons are much weaker: for instance, they cannot model the XOR-gate (a result known as the XOR Problem, proved by Marvin Minsky).
Finally, here is some Scheme code I hacked together to create individual perceptrons for the purpose of modeling logic gates.
(define (.* x y)
(if (or (null? x) (null? y))
0
(+ (* (car x) (car y)) (.* (cdr x) (cdr y)))))
(define (percept weights thresh)
(lambda (inputs)
(>= (.* weights inputs) thresh)))
(define (not-percept in)
((percept '(-1) 0) in))
(define (and-percept in)
((percept '(0.5 0.5) 1) in))
(define (or-percept in)
((percept '(1 1) 1) in)))
*This isn't really true, because brightness and color aren't independent of one another. But it's close enough.
**Or normalize each channel, which amounts to the same thing.
[1] http://en.wikipedia.org/wiki/Perceptron (25 Feb 2008).
[2] http://www.uphs.upenn.edu/news/News_Releases/jul06/retinput.htm