Neural Network
ニューラル・ネット・モデルの記述は、読み手が人工ニューラル・ネット技術についての一般的な知識を持っていると仮定します。ニューラル・ネットは1つ以上の入力ノードおよび1つ以上のニューロンを持っています。あるニューロンの出力はネットワークの出力です。ネットワークは、ニューロンおよびそれらの接続、aka weightsによって定義されます。すべてのニューロンは層(layers)へ組織(organized)されます;層のシーケンスは、活性化(activation)が計算される順序を定義します。計算が次の層L+1に移る前に、ある層Lの中のニューロンのためのすべての出力活性(output activation)が評価されます。このことは、層L+iの中のニューロンの出力がL+i>Lとなる層Lにおける入力として使われるところの現在のネットワーク(recurrent networks)を許すことに気を付けなければならない。層中のニューロンに対する特定の評価順序(evaluation order)を定義しない。
各々のニューロンは1つ以上の入力値(それらの値はネットワークの繋がり(connection)を通じてやってくる。)を受け取り、ただ一つの出力値を送ります。あるニューロンに対して、すべての入って来る接続(incoming connections)は対応するNeuron(ニューロン)要素に含まれています。各接続Conは、それが来るノードのIDおよび重量を格納します。バイアス重量係数(bias weight coefficient)はNeuron(ニューロン)要素の属性として格納されるでしょう。
ネットワーク中のすべてのニューロンは同じ(デフォルトの)活性化関数(activation function)を持つと仮定されるが、それにもかかわらず、個々のニューロンはそれ自身の活性化とデフォルトに関係ないしきい値(threshold)をもつだろう。固定ニューロンjおよびWiがニューロンiからの接続についての重み付けをあらわすと仮定すると、下のように計算されます。
Z = Sum( Wi * output(i) ) + bias
output(j) = activation( Z )
活性化関数は次のとおりです:
threshold(しきい値):
activation(Z) = (Zがしきい値(threshold)より大きければ1、そうでなければ0)
logistic:
activation(Z) = 1 / (1 + exp(-Z))
tanh:
activation(Z) = (1-exp(-2Z)/(1+exp(-2Z))
identity(同一性):
activation(Z) = Z
softmax:
output(j) = exp ( Z_j )/(SUM_k exp(Z_k)) ただし、sumは同じcategorical出力フィールドに対応する出力ユニットすべてに対して取られる。
softmax活性化関数は出力層の中のニューロンのためだけに使用することができます。softmax活性化関数上の更なる背景(background)の理解のために、ニューラルネットのFAQやチュートリアルを参照してください。
DTD
<!ELEMENT NeuralNetwork (Extension*, MiningSchema, ModelStats?, NeuralInputs, (NeuralLayer+), NeuralOutputs?, Extension*) > <!ATTLIST NeuralNetwork modelName CDATA #IMPLIED functionName %MINING-FUNCTION; #REQUIRED algorithmName CDATA #IMPLIED activationFunction %ACTIVATION-FUNCTION #REQUIRED threshold %REAL-NUMBER; #IMPLIED > <!ELEMENT NeuralInputs ( Extension*, NeuralInput+ ) > <!ELEMENT NeuralLayer ( Extension*, Neuron+ ) > <!ATTLIST NeuralLayer numberOfNeurons %INT-NUMBER; #IMPLIED activationFunction %ACTIVATION-FUNCTION; #IMPLIED > <!ELEMENT NeuralOutputs ( Extension*, NeuralOutput+ ) > |
NeuralInputは、ニューラル・ネットの中で値を処理することができるように入力フィールドがどのように正規化されるかを定義します。例えば、文字列値は数値としてコード化されなければなりません。
NeuralOutputは、ニューラル・ネットの出力がどのように解釈されるべきかを定義します。
<!ENTITY % ACTIVATION-FUNCTION "(threshold | logistic | tanh | identity | softmax)" > <!ENTITY % NN-NEURON-ID "CDATA" > <!ENTITY % NN-NEURON-IDREF "CDATA" > |
NN-NEURON-IDはニューロンを識別する単なる文字列です。その文字列はXML-IDである必要はありません。なぜなら、PMMLドキュメントは、違ったモデル中のニューロンが同じidentifierを持ちうる複数のネットワークモデルを持ちうるからです。しかしながら、一つのモデルの範囲内で、すべてのニューロンは一意のidentifierを持たなければなりません。
ニューラル・ネット入力ニューロン
入力ニューロンは、入力フィールドに対して正規化された値を表\わします。数の入力フィールドは通常、一つの入力ニューロンに写像されます。他方、categoricalな入力フィールドは通常、いくつかのfan-out関数を用いて、入力ニューロンの集合へと写像されます。要素NormContinuosおよびNormDiscreteは、正規化に対する個別のDTDサブセットで、定義されます。要素DerivedFieldはこれらのtransformation用の一般的コンテナーです。
<!ELEMENT NeuralInput (Extension*, DerivedField) > <!ATTLIST NeuralInput id %NN-NEURON-ID; #REQUIRED > |
Restrictions(制限):数の入力フィールドは、入力層に二度以上現われてはなりません。同様に、入力値を共に持つ対のcategoricalな入力フィールドは、入力層に二度以上現われてはなりません。
ニューラル・ネット・ニューロン
<!ELEMENT Neuron (Extension*, Con+) > <!ATTLIST Neuron id %NN-NEURON-ID; #REQUIRED bias %REAL-NUMBER; #IMPLIED activationFunction %ACTIVATION-FUNCTION; #IMPLIED threshold %REAL-NUMBER; #IMPLIED > |
ニューロンは、すべての層において一意であるべきidentifierを含んでいます、その属性thresholdはデフォルト値0を持っています。activationFunctionが与えられない場合、NeuralNetwork要素のデフォルトのactivationFunctionが適用されます。属性「bias」は、暗黙的にユニットの値が1.0で、重さが「bias」の値であるバイアスユニットとの接続を定義しています。
ニューラルネット・ノード間の重み付けされた接続は、Con要素によって表\わされます。
<!ELEMENT Con (Extension*) > <!ATTLIST Con from %NN-NEURON-IDREF; #REQUIRED weight %REAL-NUMBER; #REQUIRED > |
Con要素は常にニューロンの一部です。それらは、その親元素に入る接続を定義します。「from」によって識別されたニューロンは、任意の層の一部でしょう。
すべてのノードのNN-NEURON-IDは、NeuralInput と Neuron nodesの和集合を通じて(across)、一意でなければならない。 接続の「from」属性とNeuralOutputsはこれらのidentifiersを参照します。
ニューラル・ネット出力ニューロン
入力ニューロンと平行して、正規化することで入力フィールドと接続される出力ニューロンが存在します。入力ニューロンの活性化が、対応する入力フィールドの値によって定義されている一方、出力ニューロンの活性化は活性化関数によって計算されます。したがって、出力ニューロンは「Neuron」によって、定義されます。監督された学習(supervised learning)をもつネットワークでは、出力ニューロンの計算による活性が、対応する目標フィールドの正規化された値と比較されます;これらの値はしばしば「教師値(teach values)」呼ばれます。ニューロンの活性化と正規化された目標フィールドの間の差は、予\測エラー(prediction error)を決定します。目標フィールドのための正規化のscoringのために、出力ニューロン中の予\測された値を非正規化(正規化を元に戻すこと:舟)するために使用されます。したがって、出力ニューロンを表\現する「Neuron」のそれぞれの実例は正規化されたフィールドに対して付加的に接続されています。ニューロン活性化を元々の領域の値へと写像するために、scoringの手続きに正規化の逆を適応しなければならないことに注意して下さい。
ネットワークの出力にニューロンの出力を接続しなさい。
<!ELEMENT NeuralOutput ( Extension*, DerivedField) > <!ATTLIST NeuralOutput outputNeuron %NN-NEURON-IDREF; #REQUIRED > |
逆伝播(back propagation)をもつニューラルの値予\測については、出力層が単一のニューロンを含んでいます。これは予\測された値を与えて、逆正規化されます。
逆伝播をもつニューラルの分類については、出力層が1つ以上のニューロンを含んでいます。最大の活性化をもつニューロンが予\測されるクラス・ラベルを決定します。最大の活性化をもつ一意のニューロンがない場合は、予\測値は未定義です。
適合
・レベルNからレベルM(M<=N)への逆方向の接続や隣接していない(non-adjacent)層間の接続は、コアなものではない。
・ニューロン毎のactivationFunctionに対する変数値は、コアなものではない。
モデル例
<?xml version="1.0" ?> <PMML version="2.0"> <Header copyright="DMG.org"/> <DataDictionary numberOfFields="5"> <DataField name="gender" optype="categorical"> <Value value=" female"/> <Value value=" male"/> </DataField> <DataField name="no of claims" optype="categorical"> <Value value=" 0"/> <Value value=" 1"/> <Value value=" 3"/> <Value value=" > 3"/> <Value value=" 2"/> </DataField> <DataField name="domicile" optype="categorical"> <Value value="suburban"/> <Value value=" urban"/> <Value value=" rural"/> </DataField> <DataField name="age of car" optype="continuous"/> <DataField name="amount of claims" optype="continuous"/> </DataDictionary> <NeuralNetwork modelName="Neural Insurance" functionName="regression" activationFunction="logistic"> <MiningSchema> <MiningField name="gender"/> <MiningField name="no of claims"/> <MiningField name="domicile"/> <MiningField name="age of car"/> <MiningField name="amount of claims" usageType="predicted"/> </MiningSchema> <NeuralInputs> <NeuralInput id="0"> <DerivedField> <NormContinuous field="age of car"> <LinearNorm orig="0.01" norm="0"/> <LinearNorm orig="3.07897" norm="0.5"/> <LinearNorm orig="11.44" norm="1"/> </NormContinuous> </DerivedField> </NeuralInput> <NeuralInput id="1"> <DerivedField> <NormDiscrete field="gender" value="male"/> </DerivedField> </NeuralInput> <NeuralInput id="2"> <DerivedField> <NormDiscrete field="no of claims" value="0"/> </DerivedField> </NeuralInput> <NeuralInput id="3"> <DerivedField> <NormDiscrete field="no of claims" value="1"/> </DerivedField> </NeuralInput> <NeuralInput id="4"> <DerivedField> <NormDiscrete field="no of claims" value="3"/> </DerivedField> </NeuralInput> <NeuralInput id="5"> <DerivedField> <NormDiscrete field="no of claims" value="3"/> </DerivedField> </NeuralInput> <NeuralInput id="6"> <DerivedField> <NormDiscrete field="no of claims" value="2"/> </DerivedField> </NeuralInput> <NeuralInput id="7"> <DerivedField> <NormDiscrete field="domicile" value="suburban"/> </DerivedField> </NeuralInput> <NeuralInput id="8"> <DerivedField> <NormDiscrete field="domicile" value="urban"/> </DerivedField> </NeuralInput> <NeuralInput id="9"> <DerivedField> <NormDiscrete field="domicile" value="rural"/> </DerivedField> </NeuralInput> </NeuralInputs> <NeuralLayer> <Neuron id="10"> <Con from="0" weight="-2.08148"/> <Con from="1" weight="3.69657"/> <Con from="2" weight="-1.89986"/> <Con from="3" weight="5.61779"/> <Con from="4" weight="0.427558"/> <Con from="5" weight="-1.25971"/> <Con from="6" weight="-6.55549"/> <Con from="7" weight="-4.62773"/> <Con from="8" weight="1.97525"/> <Con from="9" weight="-1.0962"/> </Neuron> <Neuron id="11"> <Con from="0" weight="-0.698997"/> <Con from="1" weight="-3.54943"/> <Con from="2" weight="-3.29632"/> <Con from="3" weight="-1.20931"/> <Con from="4" weight="1.00497"/> <Con from="5" weight="0.033502"/> <Con from="6" weight="1.12016"/> <Con from="7" weight="0.523197"/> <Con from="8" weight="-2.96135"/> <Con from="9" weight="-0.398626"/> </Neuron> <Neuron id="12"> <Con from="0" weight="0.904057"/> <Con from="1" weight="1.75084"/> <Con from="2" weight="2.51658"/> <Con from="3" weight="-0.151895"/> <Con from="4" weight="-2.88008"/> <Con from="5" weight="0.920063"/> <Con from="6" weight="-3.30742"/> <Con from="7" weight="-1.72251"/> <Con from="8" weight="-1.13156"/> <Con from="9" weight="-0.758563"/> </Neuron> </NeuralLayer> <NeuralLayer> <Neuron id="13"> <Con from="10" weight="0.76617"/> <Con from="11" weight="-1.5065"/> <Con from="12" weight="0.999797"/> </Neuron> </NeuralLayer> <NeuralOutputs> <NeuralOutput outputNeuron="13"> <DerivedField> <NormContinuous field="amount of claims"> <LinearNorm orig="0" norm="0.1"/> <LinearNorm orig="1291.68" norm="0.5"/> <LinearNorm orig="5327.26" norm="0.9"/> </NormContinuous> </DerivedField> </NeuralOutput> </NeuralOutputs> </NeuralNetwork> </PMML> |