I recently worked on a simple example of machine learning with my C# class partner, Rebecca Fletcher. I thought I would include my thoughts on this approach to AI after applying it to a simple case, as it is related to one of the suggested approaches I considered for my senior design project.
As instructed by our teacher, PhD student Jeff Vaughan, we began implementing a simple perceptron to recognize handwritten images as representing a number “3″ or a number “5″. In this particular interpretation, the black and white images are translated to a feature vector, with each pixel mapping directly to one of the ordered elements in the vector. In this case, white pixels are represented as 1 and black pixels are represented as -1 in the feature vector. There is also a single mutable weight vector, which determines how influential each element (pixel position) in the the feature vector is. The function H assigns a guess to a given example by taking the dot product of a given feature vector, and mapping this value to a label. Specifically, negative values are mapped to the label 0, and positive values are mapped to the label 1. Then the weight vector may be updated if the guess is incorrect. If the guess was too low (i.e. the dot product was negative and mapped to 0, when it should have been positive and mapped to 1), the weight vector is increased by the particular feature vector, scaled by a “learning rate” alpha. Similarly, if the guess is too high, the weight vector is decreased by the feature vector scaled by alpha. Therefore, the provided update function can be summarized as follows:
new_weight_vector = current_weight_vector + (correct_label – predicted_label) * alpha * feature_vector
As mentioned by Dr. Badler earlier and seen elsewhere, more complicated systems can have a more specifically designed length-n feature vector. This feature vector may then be weighted with a weight vector if desired, but with keeping the elements distinct. The result may then be mapped to an n-dimensional space. This n-dimensional space is then divided into judgements on the situation. The handwriting perceptron here is a simpler version of the same idea, mapping the weighted data to 1-dimensional space, with the judgment division at zero.
After working on the handwriting perceptron, it is even more clear that using solely this form of AI would not be ideal for my Go program. As an inexperienced Go player, I would not know how to design the feature vector, weighting system, or n-dimensional space so as to encourage useful learning. Additionally, even if I were much more familliar with Go, it seems that the design could be strongly biased by my own playing style and the strategies I would consider. However, machine learning in a style somewhat like this could perhaps be used to enhance the moves chosen by the Go program in playing out randomized games.