[PYTHON] Introduction et mise en œuvre de la fonction d'activation

introduction

Cet article est une continuation de Machine Learning ② Fonction d'activation de Perceptron. Cette fois, il s'agit d'un article sur la fonction d'activation, la fonction d'étape et la fonction sigmoïde.

référence

Références: O'REILLY JAPAN Deep Learning from scratch Dernière fois: Machine learning ② Fonction d'activation Perceptron

Fonction d'activation

Qu'est-ce qu'une fonction step?

Une fonction qui commute la sortie à un certain seuil est appelée une fonction d'étape. Il pourrait être exprimé par la formule suivante.

Équation 3-1

aa


y=h(b+w1x1 + w2x2)\\
h(x) = \left\{
\begin{array}{ll}
1 & (x \, > \, 0) \\
0 & (x \, \leqq \, 0)
\end{array}
\right.

Mise en œuvre de la fonction d'étape

Cette fois, je vais implémenter une fonction step en utilisant Python et l'afficher à l'aide d'un graphique. Nous vous serions reconnaissants si vous pouviez vérifier vous-même la méthode d'installation, etc. Tout d'abord, créez une fonction step en Python. Utilisez l'équation 3-1.

3-1step_func.py


def step_function(x):
    #Seuls les nombres réels peuvent être pris en charge comme arguments(N'acceptez pas les tableaux numpy)
    if x > 0:
        return 1
    else:
        return 0

L'implémentation ci-dessus est simple, mais elle présente le problème que seuls des nombres réels peuvent être saisis dans l'argument x. Vous pouvez l'utiliser comme step_function (2.0), mais vous ne pouvez pas prendre le tableau NumPy etc. comme argument. Il est très pratique de pouvoir traiter plusieurs données à la fois s'il peut gérer des tableaux NumPy. Par conséquent, comment remplacer cette fonction créée.

3-1step_func.py



import numpy as np

def step_function(x):
    #Seuls les nombres réels peuvent être pris en charge comme arguments(N'acceptez pas les tableaux numpy)

    #Un type bourian est généré pour chaque élément à l'aide d'opérations d'inégalité sur le tableau NumPy.
    y = x > 0
    
    #astype()Tout type dans la méthode (cette fois np.peut être changé en type int)
    return y.astype(np.int)

input_data = np.array([1.0, 2.0, 3, 0])
output_data = step_function(input_data)
print(output_data)

3-1step_func.résultat d'exécution py


[1 1 1 0]

Je vais omettre l'explication des méthodes et de la syntaxe de base dans le programme, mais j'ai écrit une explication provisoire dans les commentaires. Pour vérifier le résultat de l'exécution, vous pouvez voir que si une valeur supérieure à 0 est entrée, elle renvoie 1.

Graphique de la fonction pas à pas

La fonction step définie cette fois est affichée dans un graphique.

3-1step_func.py



import numpy as np
import matplotlib.pylab as plt

def step_function(x):
    #Seuls les nombres réels peuvent être pris en charge comme arguments(N'acceptez pas les tableaux numpy)

    #Un type bourian est généré pour chaque élément à l'aide d'opérations d'inégalité sur le tableau NumPy.
    y = x > 0
    
    #astype()Tout type dans la méthode (cette fois np.peut être changé en type int)
    return y.astype(np.int)


# -5 ~ 5 0.Générer un tableau en 1 étape
input_data = np.arange(-5.0, 5.0, 0.1)
output_data = step_function(input_data)

#Génération de données graphiques
plt.plot(input_data, output_data)

#Définir la plage de l'axe y
plt.ylim(-0.1, 1.1)
plt.show()
Résultat d'exécution

ステップ関数のグラフ.jpg

À partir des résultats ci-dessus, vous pouvez confirmer que le résultat change à 0.

Qu'est-ce qu'une fonction sigmoïde?

L'une des fonctions d'activation souvent utilisées dans les réseaux neuronaux est la fonction sigmoïde exprimée par la formule suivante.

Équation 3-2

aa



h(x) = \frac{1}{1+e^{-x}}\\
e=Nombre de napiers ≒ 2.718

Cela semble compliqué, mais ce n'est qu'une fonction. Comme les autres fonctions, la fonction sigmoïde sort sous la forme convertie en substituant une valeur.

Différence entre Perceptron et Neural Network

La seule différence entre Perceptron et Neural Network est la fonction d'activation. La structure des neurones et la méthode de transmission du signal sont les mêmes pour Perceptron et Neural Network.

Implémentation de la fonction sigmoïde

Tout d'abord, écrivez l'équation 3-2.

3-2sigmoid_func.py


import numpy as np
import matplotlib.pylab as plt

def sigmoid_function(x):

    #np.exp(-x)Est e^-Représente x
    #Le calcul de la valeur scalaire et du tableau NumPy est calculé entre chaque élément du tableau.
    return 1 / (1 + np.exp(-x))

input_data = np.arange(-5.0, 5.0, 0.1)
output_data = sigmoid_function(input_data)
plt.plot(input_data, output_data)
plt.ylim(-0.1, 1.1)
plt.show()
Résultat d'exécution

シグモイド関数のグラフ.jpg

Le fait est qu'il se situe toujours dans la plage de 0 à 1.

Résumé

En regardant la différence entre les deux fonctions d'activation introduites, cela ressemble à ce qui suit.

sample.py


import numpy as np
import matplotlib.pylab as plt


def step_function(x):
    #Seuls les nombres réels peuvent être pris en charge comme arguments(N'acceptez pas les tableaux numpy)

    #Un type bourian est généré pour chaque élément à l'aide d'opérations d'inégalité sur le tableau NumPy.
    y = x > 0
    
    #astype()Tout type dans la méthode (cette fois np.peut être changé en type int)
    return y.astype(np.int)

def sigmoid_function(x):

    #np.exp(-x)Est e^-Représente x
    #Le calcul de la valeur scalaire et du tableau NumPy est calculé entre chaque élément du tableau.
    return 1 / (1 + np.exp(-x))

input_data1 = np.arange(-5.0, 5.0, 0.1)
output_data1 = step_function(input_data1)

input_data2 = np.arange(-5.0, 5.0, 0.1)
output_data2 = sigmoid_function(input_data2)

#Génération de données graphiques
plt.plot(input_data1, output_data1)
plt.plot(input_data2, output_data2)

#Définir la plage de l'axe y
plt.ylim(-0.1, 1.1)
plt.show()
ファイル名 Pouvez-vous voir que la fonction sigmoïde est plus fluide que la fonction pas à pas? Cette différence de régularité a des implications importantes pour l'apprentissage des réseaux de neurones.

Recommended Posts

Introduction et mise en œuvre de la fonction d'activation
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Explication et mise en œuvre de SocialFoceModel
Introduction et astuces de mlflow.
Explication et mise en œuvre de PRML Chapitre 4
Explication et implémentation de l'algorithme ESIM
Implémentation de la fonction de connexion dans Django
Explication et mise en œuvre du perceptron simple
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs
Mise en œuvre et expérience de la méthode de clustering convexe
Explication et implémentation de l'algorithme Decomposable Attention
Introduction facile de la série python3 et d'OpenCV3
Introduction de scikit-Optimize
Introduction de PyGMT
Introduction de Python
Comparaison d'exemples d'implémentation de k-means de scikit-learn et pyclustering
Implémentation de l'arbre TRIE avec Python et LOUDS
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
Explication de la distance d'édition et de l'implémentation en Python
Introduction de trac (Windows + trac 1.0.10)
[Python of Hikari-] Chapitre 06-02 Fonction (argument et valeur de retour 1)
Jouez avec l'implémentation de l'interface utilisateur de Pythonista 3 [Super Super Primer]
Introduction de ferenOS 1 (installation)
Introduction du wrapper Virtualenv
Mise à jour séquentielle de la co-distribution pour la dérivation et l'implémentation des expressions
Liste des fonctions d'activation (2020)
Implémentation de la séquence de Fibonacci
J'ai touché Bergeronnette (3). Enquête et mise en place de messages pop-up.
Principes de base et mise en œuvre de Perceptron
DataNitro, implémentation de la fonction de lecture des données de feuille
Implémentation de l'écran de l'administrateur DB par Flask-Admin et Flask-Login
Fonction de réglage NumPy
Implémentation Python du mode de fusion CSS3 et discussion sur l'espace colorimétrique
Dérivation et implémentation d'équations de mise à jour pour la décomposition de facteurs tensoriels non négatifs
[Introduction à cx_Oracle] (Partie 4) Récupération et défilement du jeu de résultats
Implémentation facile de la fonction de paiement par carte de crédit avec PAY.JP [Django]
[Introduction à Scipy] Calcul de la courbe de Lorenz et du coefficient de Gini ♬
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
Théorie et mise en œuvre de modèles de régression multiple - pourquoi une régularisation est nécessaire -
Introduction de DataLiner ver.1.3 et comment utiliser Union Append
Vérification et mise en œuvre de la méthode de reconstruction vidéo en utilisant GRU et Autoencoder
Résumé des fonctions d'activation (step, sigmoïde, ReLU, softmax, fonction constante)
Explication du CSV et exemple d'implémentation dans chaque langage de programmation
Réduction de code - Transformateur de pipeline et de fonction -
Le problème des menteurs et de l'honnêteté
Mécanisme de pyenv et virtualenv
Implémentation de TF-IDF à l'aide de gensim
Concernant la fonction d'activation Gelu
Implémentation de MathJax sur Sphinx
Pré-traitement et post-traitement de pytest
[Introduction à cx_Oracle] Présentation de cx_Oracle
Quelle est la fonction d'activation?
[python] Valeur de l'objet fonction (?)
[Python] L'origine du nom de la fonction python
Combinaison de récursif et de générateur
Combinaison de anyenv et direnv
Normalisation de la théorie et de la mise en œuvre des flux