Looking for neural-network Answers? Try Ask4KnowledgeBase
Looking for neural-network Keywords? Try Ask4Keywords

neural-networkニューラルネットワークを使い始める


備考

ハイテク分野のニューラルネットワークは、統計的回帰、データ分類、製品再構成、コンピュータビジョン、自然言語の理解と合成、音声からテキストへ、テキストから音声へ、および他の多くの複雑なタスクに役立ちます。ニューラルネットワークは、機械学習や深い学習で使用され、人工知能に関連しています。

ニューラルネットワークは、学習したものと同様の入力を与えられた出力を後で予測できるように、データのデータを訓練し、データを訓練することを目的としています。

人工ニューラルネットワークのプログラミング、トレーニング、および使用のための多くのフレームワークが存在する。最もよく知られている機械学習フレームワークのいくつかを以下に示します。

  • Tensorflow
  • カフェ
  • ケラス
  • テアノ
  • トーチ
  • DL4J

Java Encogエンジン

Encogは使いやすいJavaニューラルネットワークエンジンです

public static double XOR_INPUT[][] = { { 0.0, 0.0 }, { 1.0, 0.0 },
        { 0.0, 1.0 }, { 1.0, 1.0 } };

public static double XOR_IDEAL[][] = { { 0.0 }, { 1.0 }, { 1.0 }, { 0.0 } };

public static void main(final String args[]) {
    
    // create a neural network, without using a factory
    BasicNetwork network = new BasicNetwork();
    network.addLayer(new BasicLayer(null,true,2));
    network.addLayer(new BasicLayer(new ActivationSigmoid(),true,3));
    network.addLayer(new BasicLayer(new ActivationSigmoid(),false,1));
    network.getStructure().finalizeStructure();
    network.reset();

    // create training data
    MLDataSet trainingSet = new BasicMLDataSet(XOR_INPUT, XOR_IDEAL);
    
    // train the neural network
    final ResilientPropagation train = new ResilientPropagation(network, trainingSet);

    int epoch = 1;

    do {
        train.iteration();
        System.out.println("Epoch #" + epoch + " Error:" + train.getError());
        epoch++;
    } while(train.getError() > 0.01);
    train.finishTraining();

    // test the neural network
    System.out.println("Neural Network Results:");
    for(MLDataPair pair: trainingSet ) {
        final MLData output = network.compute(pair.getInput());
        System.out.println(pair.getInput().getData(0) + "," + pair.getInput().getData(1)
                + ", actual=" + output.getData(0) + ",ideal=" + pair.getIdeal().getData(0));
    }
    
    Encog.getInstance().shutdown();
}
 

これは、ニューロネットワークの「Hello World」に相当します。

Python Neuronクラス

import numpy as np #There is a lot of math in neurons, so use numpy to speed things up in python; in other languages, use an efficient array type for that language
import random      #Initial neuron weights should be random

class Neuron:

def __init__(self, nbr_inputs, weight_array = None):
    if (weight_array != None): #you might already have a trained neuron, and wish to recreate it by passing in a weight array h ere
        self.weight_array = weight_array
    else:                      #...but more often, you generate random, small numbers for the input weights.  DO NOT USE ALL ZEROES, or you increase the odds of getting stuck when learning
        self.weight_array = np.zeros(nbr_inputs+1)
        for el in range(nbr_inputs+1): #+1 to account for bias weight
            self.weight_array[el] = random.uniform((-2.4/nbr_inputs),(2.4/nbr_inputs))
    self.nbr_inputs = nbr_inputs

def neuron_output(self,input_array):
    input_array_with_bias = np.insert(input_array,0,-1)
    weighted_sum = np.dot(input_array_with_bias,self.weight_array)
    #Here we are using a hyperbolic tangent output; there are several output functions which could be used, with different max and min values and shapes
    self.output = 1.716 * np.tanh(0.67*weighted_sum)
    return self.output
 

ニューラルネットワークの典型的なワークフロー

使用されるライブラリにかかわらず、ニューラルネットワークのトレーニングと使用の典型的なワークフローは次のようになります。

トレーニングデータ

  1. トレーニングデータの取得: X 変数は入力、 Y 変数は出力です。最も簡単なことは、論理ゲートを学習することです。ここで、 X はベクトルまたは2つの数で、 Y は1つの数のベクトルです。通常、入力値と出力値は浮動小数点数なので、単語の場合は、各単語を異なるニューロンに関連付けることができます。また、文字を直接使用することもできますし、辞書全体を保持するよりも少ないニューロンを使用します。

建築

  1. ニューラルネットワークのアーキテクチャを定義する:これは、ニューロンがどのようにリンクされているかを指定することによって行われ、どのアルゴリズムによってニューロン間の接続が訓練され、変更されるかによって決まります。一例として、処理テキストは、各タイムステップで新しい入力を受け取り、効果的な計算目的のためにニューロンが以前の値を参照しているリカレントニューラルネットワークを使用して行われます。一般に、ニューロンの層が使用され、入力から出力まで包括的に積み重ねられます。ニューロンがレイヤーから他のレイヤーに接続される方法は大きく異なります。いくつかのコンピュータビジョンアーキテクチャでは、深いニューラルネットワーク(多くの特殊レイヤが積み重ねられている)を使用しています。

評価

  1. 次に、ニューラルネットワークは、通常、 直接訓練されていないデータについて評価される。これは提示で構成さX 比較そして、ニューラルネットワークへのデータの一部をY 、それは本当の予測Y 。実行される学習の質を評価するための多くの指標が存在する。

改善

  1. その性能を改善するために、ニューラルネットワークのアーキテクチャをもう一度試すのが一般的です。両方のケースで問題が生じるので、ニューラルネットワークはあまりにも知的でなくてはならない。最初のケースでは、ニューラルネットワークがデータに対して大きすぎて完全に記憶している可能性があり、新しい目に見えない例を一般化することができない可能性があります。 2番目のケースでは、ニューラルネットワークがあまりにも愚かである(小さすぎる)場合、それも学習に失敗します。

実使用

  1. それを新しいデータに使用して、出力を予測します。実際、ニューラルネットワークは非常に有用であり、テキストの自動翻訳や応答は良い例です。この段階でニューラルネットワークを改善するために使用される技法の1つはオンライン学習です。つまり、ネットワークが自分の出力に対して建設的なフィードバックを得ることができれば、学習プロセスを続けることができます。例として、これは翻訳上のユーザーからのフィードバックを求めているGoogle翻訳の場合であるかもしれません