0
votes

Pourquoi existe-t-il une fonction d'activation dans chaque couche net neurale et non seulement dans la couche finale?

J'essaie de m'enseigner moi-même de l'apprentissage de la machine et j'ai une question similaire à ce .

est-ce correct:

Par exemple, si j'ai une matrice d'entrée, où X1, X2 et X3 sont trois caractéristiques numériques (par exemple, disent qu'ils sont de la longueur de pétale, de la longueur de la tige, de la longueur de la fleur, et je 'm Essayer de narquer si l'échantillon est une espèce de fleur particulière ou non): xxx

que vous prenez le vecteur de la première ligne (pas de colonne) du tableau ci-dessus pour Soyez entré dans le réseau comme celui-ci:

IE Il y aurait trois neurones (1 pour chaque valeur de la première ligne de table), puis W1, W2 et W3 sont sélectionnés au hasard, puis pour calculer le premier neurone dans la colonne suivante, vous faites la multiplication que j'ai décrite et que vous ajoutez. un terme de biais sélectionné au hasard. Cela donne la valeur de ce nœud.

Ceci est fait pour un ensemble de nœuds (c'est-à-dire que chaque colonne aura quatre nœuds (trois + un biais), pour la simplicité, j'ai supprimé les trois autres nœuds de la Deuxième colonne), puis dans le dernier nœud avant la sortie, il existe une fonction d'activation pour transformer la somme en une valeur (par exemple 0-1 pour Sigmoid) et que la valeur vous indique si la classification est oui ou non.

Je suis désolé de la manière dont cela est basique, je veux vraiment comprendre le processus et je le fais de ressources gratuites. Donc, donc généralement, vous devez sélectionner le nombre de nœuds de votre réseau pour être un multiple du nombre de fonctionnalités, par exemple. Dans ce cas, il serait logique d'écrire: xxx

Ce que je ne comprends pas, c'est pourquoi le modèle Keras a une fonction d'activation dans chaque couche du réseau et non seulement À la fin, c'est pourquoi je me demande si ma compréhension est correcte / pourquoi j'ai ajouté la photo.

Editer 1: Juste une note que j'ai vue dans le neurone de biais, je mets sur le bord " B = 1 ', cela pourrait être déroutant, je sais que le biais n'a pas de poids, ce qui n'était donc qu'un rappel que le poids du nœud de biais est de 1.


0 commentaires

3 Réponses :


1
votes

Il semble que votre question soit la raison pour laquelle il existe une fonction d'activation pour chaque couche au lieu de la dernière couche. La réponse simple est, s'il n'y a pas d'activations non linéaires au milieu, quelle que soit la profondeur de votre réseau, elle peut être bouillie à une seule équation linéaire. Par conséquent, l'activation non linéaire est l'un des grands matériaux qui permettent à des réseaux profonds d'être réellement «profonds» et d'apprendre des fonctionnalités de haut niveau.

Prenez l'exemple suivant, dites que vous avez 3 réseau de neurones de la couche sans aucune activation non linéaire au milieu, mais une couche softmax finale. Les poids et les biais de ces couches sont (W1, B1), (W2, B2) et (W3, B3). Ensuite, vous pouvez écrire la sortie finale du réseau comme suit. xxx

faisons quelques manipulations. Nous allons simplement remplacer H3 en fonction de x, xxx

en d'autres termes, H3 est au format suivant.

h3 = Softmax (WX + B)

Donc, sans les activations non linéaires, nos réseaux à 3 couches ont été écrasés sur un réseau unique. C'est pourquoi des activations non linéaires sont importantes.


0 commentaires

2
votes

Plusieurs problèmes ici, mis à part la question de votre titre, mais comme ce n'est pas l'heure et la place pour des tutoriels complètes, je limiterai la discussion à certains de vos points, en tenant compte également d'au moins une réponse de plus déjà. existe.

Donc, donc généralement, vous devez sélectionner le nombre de nœuds de votre réseau pour être un multiple du nombre de fonctionnalités, P> blockQuote>

n °. p>

Le nombre de fonctionnalités est transmis dans l'argument INPUT_DIM CODE>, qui est défini uniquement pour la première couche du modèle; Le nombre d'entrées pour chaque couche sauf le premier est simplement le nombre de sorties de la précédente. Le modèle Keras que vous avez écrit n'est pas valide, et il produira une erreur, car pour votre 2e couche, vous demandez INPUT_DIM = 3 code>, tandis que le précédent a clairement 6 sorties (nœuds). p>

au-delà de ce argument INPUT_DIM CODE>, il n'existe aucune autre relation entre le nombre de fonctionnalités de données et le nombre de nœuds de réseau; Et comme il semble que vous ayez à l'esprit les données d'IRIS (4 caractéristiques), voici un Exemple reproductible simple d'appliquer un modèle Keras à eux. p>

Qu'est-ce qui est quelque peu caché dans l'API séquentielle Keras (que vous utilisez. ici) est qu'il existe en fait une couche d'entrée implicite et le nombre de ses nœuds est la dimensionnalité de l'entrée; Voir la propre réponse à Couche d'entrée de modèle séquentielle KERAS pour plus de détails. P>

Donc, le modèle que vous avez dessiné dans votre pad correspond en fait au modèle Keras suivant écrit à l'aide de l'API séquentiel: P>

inputs = Input(shape=(3,))                
outputs = Dense(1, activation='linear')(inputs)     

model = Model(inputs, outputs)


0 commentaires

1
votes

Imaginez, vous avez une couche d'activation uniquement dans la dernière couche (dans votre cas, Sigmoid. Cela peut être quelque chose d'autre aussi .. Dites Softmax). Le but est de convertir des valeurs réelles en une plage de 0 à 1 pour une sorte de réponse de classification. Mais, l'activation dans les couches internes (couches cachées) a un but différent. C'est pour introduire une non linéarité. Sans l'activation (disons relu, tanh, etc.), ce que vous obtenez est une fonction linéaire. Et combien de couches cachées que vous avez déjà cachées, vous vous retrouvez toujours avec une fonction linéaire. Et enfin, vous convertissez cela en une fonction non linéaire dans la dernière couche. Cela pourrait fonctionner dans de simples problèmes non linéaires, mais ne pourra pas capturer une fonction non linéaire complexe. Chaque unité cachée (dans chaque couche) comprend une fonction d'activation pour intégrer une non linéarité.


0 commentaires