Dans ce chapitre, nous présenterons les réseaux de neurones et découvrirons à quoi ils ont été conçus. Ce chapitre sert de base aux chapitres suivants, tandis que celui-ci présente les concepts de base des réseaux de neurones. Dans ce chapitre, nous aborderons les sujets suivants:
Neurones artificiels
Poids et biais
Fonctions d'activation
Couches de neurones
Implémentation d'un réseau de neurones en Java
Découvrir les réseaux de neurones
Premièrement, le terme «réseaux de neurones» peut créer un instantané du cerveau dans votre esprit, en particulier pour ceux qui se sont déjà familiarisés avec lui. C'est en fait vrai, nous considérons le cerveau comme un grand réseau neuronal naturel. Cependant, que pouvons-nous dire sur les réseaux de neurones artificiels ( RNA )? Eh bien, cela commence par l'antonyme naturel et la première pensée qui nous vient à l'esprit est l'image d'un cerveau artificiel ou d'un robot qui prend en compte le terme « artificiel". Dans ce cas, nous avons également affaire à la création d'une structure similaire et inspirée du cerveau humain; c'est pourquoi on l'appelle intelligence artificielle. Par conséquent, un lecteur qui n'a aucune expérience antérieure avec ANN peut maintenant penser que le livre enseigne comment construire des systèmes intelligents, y compris un cerveau artificiel qui peut émuler la conscience humaine à l'aide de programmes Java, n'est-ce pas? Bien sûr, nous ne couvrirons pas la création de machines à penser artificielles comme dans la trilogie Matrix; cependant, ce livre expliquera plusieurs capacités incroyables et ce que ces structures peuvent faire. Nous fournirons au lecteur des codes sources Java avec la définition et la création des structures de base du réseau neuronal, en profitant de tous les avantages du langage de programmation Java.
Pourquoi des réseaux de neurones artificiels?
, . (NN) ANN , NN ,
. , ANN? .
1940- Warren McCulloch Walter Pits , . , . McCulloch Pits , . , , , , , . , , , .
, McCulloch Pits , . , ; , , , . , , .
, ANN , , , , , . ANN , , .
, |
, |
|
|
, ANN — , . , , . , .
, . ( ), ( ), ( ), :
, .
—
, — , . , (inputs) (output), , . , , :
, , . , .
—
. , , . , , .
:
(Sygmoid)
(Hyberbolic tangent)
(Hard limiting threshold)
(linear)
,
:
— (weights)
, , , , . , , (weights) (output), . , inputs , (weights) . , , , — .
—
, .
—
, ; , , , . , , . , :
, . 3 :
1. Input layer;
2. Hidden layer;
3. Output layer;
,
,
.
/ . , .
, , . . , . , 2 :
1. :
1.1 (monolayer) ;
1.2 (multilayer) ;
2. :
2.1 (Feedforward networks);
2.2 (Feedback networks);
, . . : , Adaline( ), , (Elman) .
, , , :
– . , . , , , , , .
(feedforward networks)
. – feedforward, ; , , , . – feedforward .
(Feedback networks)
, , , , – feedback-. :
– , , , . , , . feedback – , (Elman) (Hopfield), , .
—
, . , . . , , . :
, , (supervised learning), , , ( ). , « », .
!
Java. Java — - , 1990- Sun Microsystems, Oracle 2010-. , Java , . - , Java, . — - , — , , car(, ) my car(, — ). Java ( ), - (). , — . :
: , , .
: , ((public) ), ((private) (protected)), .
: , ; , - . , , .
: , , .
, , , . , , , , , : , . . / , .
, , . , - , / . . , 6 , :
: Neuron |
|
|
|
private ArrayList listOfWeightIn |
ArrayList |
private ArrayList listOfWeightOut |
ArrayList |
|
|
|
public double initNeuron() |
listOfWeightIn, listOfWeightOut |
: |
|
: |
|
public ArrayList getListOfWeightIn() |
ListOfWeightIn |
: |
|
: , ListOfWeightIn |
|
public void setListOfWeightIn(ArrayList listOfWeightIn) |
ListOfWeightIn |
: , |
|
: |
|
public ArrayList getListOfWeightOut() |
ListOfWeightOut |
: |
|
: , ListOfWeightOut |
|
public void setListOfWeightOut(ArrayList listOfWeightOut) |
ListOfWeightOut |
: , |
|
: |
|
: Neuron.java |
|
: Layer |
|
: . |
|
|
|
private ArrayList listOfNeurons |
ArrayList Neuron |
private int numberOfNeuronsInLayer |
, . |
|
|
public ArrayList getListOfNeurons() |
listOfNeurons |
: |
|
: listOfNeurons |
|
public void setListOfNeurons(ArrayList listOfNeurons) |
listOfNeurons |
: listOfNeurons |
|
: |
|
public int getNumberOfNeuronsInLayer() |
numberOfNeuronsInLayer |
: |
|
: numberOfNeuronsInLayer |
|
public void setNumberOfNeuronsInLayer(int numberOfNeuronsInLayer) |
numberOfNeuronsInLayer |
: numberOfNeuronsInLayer |
|
: |
|
: Layer.java |
|
: InputLayer |
|
: Layer |
|
|
|
|
|
|
|
|
public void initLayer(InputLayer inputLayer) |
|
: InputLayer |
|
: |
|
public void printLayer(InputLayer inputLayer) |
|
: InputLayer |
|
: |
|
: InputLayer.java |
|
: HiddenLayer |
|
: Layer |
|
|
|
|
|
|
|
|
public ArrayList initLayer( HiddenLayer hiddenLayer, ArrayList listOfHiddenLayers, InputLayer inputLayer, OutputLayer outputLayer ) |
() |
: HiddenLayer, HiddenLayer, InputLayer, OutputLayer |
|
: |
|
public void printLayer(ArrayList listOfHiddenLayers) |
() |
: HiddenLayer |
|
: |
|
: HiddenLayer.java |
|
: OutputLayer |
|
: Layer |
|
|
|
|
|
|
|
|
public void initLayer(OutputLayer outputLayer) |
|
: OutputLayer |
|
: |
|
public void printLayer(OutputLayer outputLayer) |
|
: OutputLayer |
|
: |
|
: OutputLayer.java |
|
: NeuralNet |
|
: ( , , ). : . |
|
|
|
private InputLayer inputLayer |
InputLayer |
private HiddenLayer hiddenLayer |
HiddenLayer |
private ArrayList listOfHiddenLayer |
ArrayList HiddenLayer. |
private OutputLayer outputLayer |
OutputLayer |
private int numberOfHiddenLayers |
, |
|
|
public void initNet() |
. |
: |
|
: |
|
public void printNet() |
. . |
: |
|
: |
|
: NeuralNet.java |
|
— (UML). UML , , , , , / . : , .
, NeuralNet, n. n ( ), initNet () printNet () n, , . , :
public class NeuralNetTest {
public static void main(String[] args) {
NeuralNet n = new NeuralNet();
n.initNet();
n.printNet();
}
}
, , , . , , :
Dans ce chapitre, nous avons vu une introduction aux réseaux de neurones, à ce qu'ils sont, à quoi ils sont utilisés et à leurs concepts de base. Nous avons également vu une implémentation très simple d'un réseau de neurones dans le langage de programmation Java, dans laquelle nous avons appliqué les concepts théoriques du réseau de neurones en pratique en codant chacun des éléments du réseau de neurones. Il est important de comprendre les concepts de base avant de passer aux concepts avancés. La même chose est vraie pour le code Java. Dans le chapitre suivant, nous approfondirons le processus d'entraînement des réseaux neuronaux et explorerons les différents types de pentes avec des exemples simples.
Du traducteur
Livre original: Programmation de réseau neuronal avec Java