Deep learning

An introduction to deep learning

Jeremy Fix

November 13, 2024

Slides made with slidemaker

Réseaux de neurones convolutifs

Extraction de caractéristiques par convolutions

À partir de données ayant une structure spatiale (localement corrélées), des caractéristiques peuvent être extraites par convolutions.

Sur les Images

Image originale
Laplacien discret
Flou gaussien

Reconnaissance de motif Le motif

Cela a également du sens pour les séries temporelles qui ont une structure dans le temps.

Une convolution comme multiplication de matrices creuses

Qu’est-ce qu’une convolution : Exemple en 2D





Vue comme une multiplication matricielle avec des poids fortement régularisés

Étant donné deux vecteurs 1D \(f, k\), disons \(k = [c, b, a]\) \[ (f * k) = \begin{bmatrix} b & c & 0 & 0 & \cdots & 0 & 0 \\ a & b & c & 0 & \cdots & 0 & 0 \\ 0 & a & b & c & \cdots & 0 & 0 \\ 0 & 0 & a & b & \cdots & 0 & 0\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ 0 & 0 & 0 & 0 & \cdots & b & c \\ 0 & 0 & 0 & 0 & \cdots & a & b \\ \end{bmatrix} . \begin{bmatrix} \\ f \\ \phantom{}\end{bmatrix} \]

Composition pour apprendre des caractéristiques de plus haut niveau


Les caractéristiques locales peuvent être combinées pour apprendre des caractéristiques de plus haut niveau.

Construisons un détecteur de maison

Une petite maison












Architecture

Idées Utiliser la structure des entrées pour limiter le nombre de paramètres sans limiter l’expressivité du réseau

  • Pour les entrées avec des corrélations spatiales (ou temporelles), les caractéristiques peuvent être extraites avec des convolutions de noyaux locaux

  • Une convolution peut être vue comme une couche entièrement connectée avec :

    • beaucoup de poids fixés exactement à \(0\)
    • beaucoup de poids partagés entre les positions

\(\rightarrow\) fortement régularisée !

Neocognitron (Fukushima, 1980)
LeNet5 (LeCun et al., 1989)

CNN classique de LeCun

L’architecture de LeNet-5 (LeCun et al., 1989), appelons-la le CNN classique

LeNet5 (LeCun et al., 1989)

Architecture

Deux parties principales :
- partie convolutive : C1 -> C5 : convolution - non-linéarité - sous-échantillonnage
- partie entièrement connectée : linéaire - non-linéarité Spécificités :
- Sous-échantillonnage pondéré
- Connexions gaussiennes (couche de sortie RBF)
- motif de connectivité \(S_2 - C_3\) pour réduire le nombre de poids

Nombre de paramètres :

Couche Paramètres
\(C_1\) \(156\)
\(S_2\) \(12\)
\(C_3\) \(1.516\)
\(S_4\) \(32\)
\(C_5\) \(48.120\)
\(F_6\) \(10.164\)

Vocabulaire CNN

Les éléments constitutifs de la partie convolutive d’un CNN classique

Convolution :
- taille (par ex. \(3 \times 3\), \(5\times 5\))
- remplissage (padding) (par ex. \(1\), \(2\))
- pas (stride) (par ex. \(1\))

Pooling (max/moyenne) :
- taille (par ex. \(2\times 2\))
- remplissage (par ex. \(0\))
- pas (par ex. \(2\))

Nous travaillons avec des tenseurs 4D pour les images 2D, des tenseurs 3D pour les séries temporelles nD (par ex. plusieurs enregistrements simultanés), des tenseurs 2D pour les séries temporelles 1D

Dans Pytorch, les tenseurs suivent la convention Batch-Canal-Hauteur-Largeur (BCHW, canal en premier). D’autres frameworks, comme TensorFlow ou CNTK, utilisent BHWC (canal en dernier).

Réseaux de Neurones Convolutifs dans Pytorch

CNN en pratique

Code Pytorch pour implémenter un CNN : Conv1D Conv2D, MaxPool1D MaxPool2D, AveragePooling, etc…


conv_model  = nn.Sequential(
    *conv_relu_maxpool(cin=3, cout=32,
                       csize=3, cstride=1, cpad=1,
                       msize=2, mstride=2, mpad=0),
    *conv_relu_maxpool(cin=3, cout=64,
                       csize=3, cstride=1, cpad=1,
                       msize=2, mstride=2, mpad=0), 
)

def conv_relu_maxpool(cin, cout, csize, cstride, cpad, msize, mstride, mpad):
    return [nn.Conv2d(cin, cout, csize, cstride, cpad),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(msize, mstride, mpad)
            ]

e.g. Conv2d(32, 64, 3, 1, 1)


fc_model = nn.Sequential(
    *linear_relu(output_size, 256),
    nn.Linear(256, num_classes)
)

Comment facilement calculer les dimensions de la sortie de l’étage convolutif ?


dummy_output = conv_model(torch.zeros((1, 3, height, width)))
output_size = np.prod(dummy_output.shape[1:] )

CNN en pratique

Tout doit être placé dans une sous-classe de nn.Module :


class MyModel(torch.nn.Module):
    def __init__(self, ....):
        super(MyModel, self).__init__()
        self.conv_model = nn.Sequential(...)
        output_size = ...
        self.fc_model = nn.Sequential(...)

    def forward(self, inputs):
        conv_features = self.conv_model(inputs)
        conv_features = conv_features.view(inputs.shape[0], -1)
        return self.fc_model(conv_features)

Vous pouvez (devriez 😁 ) utiliser la couche récemment introduite de nn.Flatten

10 ans de révolution des CNN

CDNN Multicolonnes

Introduit dans (Ciresan, Meier, & Schmidhuber, 2012), ensemble de CNNs entraînés avec augmentation de données

  • \(0.23\%\) d’erreur de classification sur le test MNIST
  • 1.5 million de paramètres

SuperVision

Introduit dans (Krizhevsky, Sutskever, & Hinton, 2012), l’“étincelle” donnant naissance à la renaissance des réseaux de neurones.

  • Erreur Top 5 de \(16\%\), second à \(26\%\)
  • plusieurs convolutions empilées avant le pooling
  • entraîné sur 2 GPUs, pendant une semaine sur ImageNet (redimensionné à \(256\times256\times3\)), 1M images. (maintenant c’est 18 minutes)
  • 60 Millions de paramètres, dropout, momentum, pénalité L2, augmentation de données (découpage aléatoire \(224\times224\), translation, réflexions, ACP)
  • Taux d’apprentissage à \(0.01\) divisé par \(10\) quand l’erreur de validation stagne
  • en phase de test, moyenne des probabilités sur \(5\) découpes + réflexions
  • Les couches conv sont peu coûteuses mais super importantes

SuperVision

La première couche a appris à extraire des caractéristiques significatives

ZFNet

Vainqueur ILSVRC’13. Introduit dans (Zeiler & Fergus, 2014)

  • A introduit des techniques de visualisation pour inspecter quelles caractéristiques sont apprises.
Quelques entrées obtenues par déconvolution
  • Études d’ablation sur AlexNet : les couches FC ne sont pas si importantes

  • A introduit l’idée du préentraînement supervisé (préentraînement sur ImageNet, ajustement du softmax pour Caltech-101, Caltech-256, Pascal 2012)

  • SGD mini-batch(128), momentum(0.9), taux d’apprentissage (0.01) planification manuelle

Deconvnet

Deconvnet calcule approximativement le gradient de la perte par rapport à l’entrée (Simonyan, Vedaldi, & Zisserman, 2014). Il diffère dans la façon dont le ReLu est intégré.

VGG

Second à ILSVRC’14. Introduit par (Simonyan & Zisserman, 2015).


  • 16 couches : 13 convolutives, 3 entièrement connectées
  • Uniquement convolutions \(3\times3\), pooling \(2\times2\)
  • Convolutions \(3\times3\) empilées \(\equiv\) convolution \(5\times5\) avec moins de paramètres
    • Si \(c_{in}=K, c_{out}=K\), convolution \(5\times5\) \(\rightarrow\) \(25K^2\) paramètres
    • Si \(c_{in}=K, c_{out}=K\), 2 convolutions \(3\times3\) empilées \(\rightarrow\) \(18K^2\) paramètres
  • 140 millions de paramètres, taille de batch(256), Momentum(0.9), Weight decay(\(0.0005\)), Dropout(0.5) dans FC, taux d’apprentissage(\(0.01\)) divisé \(3\) fois par \(10\)
  • Initialisation de \(B,C,D,E\) à partir de \(A\) entraîné. Init de \(A\) aléatoire \(\mathcal{N}(0, 10^{-2}), b=0\). A remarqué (Glorot & Bengio, 2010) après soumission.
  • peut gérer une taille d’entrée variable en changeant les couches FC en conv \(7\times 7\), conv\(1\times1\).
Les architectures VGG

À la recherche de la simplicité

Introduit dans (Springenberg, Dosovitskiy, Brox, & Riedmiller, 2015).

  • utilise uniquement des convolutions, avec différents strides, pas de max pooling
  • introduit la visualisation par “rétropropagation guidée”
Exemples de rétropropagation guidée
Architectures

GoogLeNet (inception v1)

Vainqueur ILSVR’14. Introduit par (Szegedy et al., 2014).

Idée Détection de caractéristiques multi-échelles et réduction de dimensionnalité

  • 22 couches, \(6.8\)M paramètres
  • entraîné en parallèle, SGD asynchrone, momentum(0.9), planification du taux d’apprentissage (\(4\%\) tous les 8 epochs)
  • en test : moyenne de Polyak et ensemble de \(7\) modèles
  • têtes auxiliaires pour atténuer le gradient qui s’évanouit

Dernières couches de GoogleNet

Réseaux Résiduels (ResNet)

Vainqueur ILSVRC’15. Introduit dans (He, Zhang, Ren, & Sun, 2016a)

Plus profond est pire ?!
Bloc résiduel

Réseaux Résiduels (ResNet)

ResNet34. Les raccourcis en pointillés et conv”/2” sont de stride 2 pour correspondre aux dimensions spatiales. Les raccourcis en pointillés utilisent des conv 1\times1 pour correspondre à la profondeur. 0.46M paramètres.
Architectures Resnet. Les Conv sont “Conv-BN-Relu”. ResNet-50 a 23M paramètres.
Variations de la branche Conv (He et al., 2016b): BN-ReLu-conv au lieu de conv-BN-ReLu
Variations de la branche Conv (He, Zhang, Ren, & Sun, 2016b): BN-ReLu-conv au lieu de conv-BN-ReLu

Variations autour des connexions de saut de couche

Réseaux Highway (Srivastava, Greff, & Schmidhuber, 2015)

  • Utilise des “portes” (comme dans LSTM, voir cours sur RNN) :
    • Porte de transformation \(T(x) = \sigma(W_T x + b_T)\)
    • Porte de transport \(C(x) = \sigma(f_c(x))\)

\[ y = T(x).H(x) + C(x).x \]

DenseNets

Densenets (Huang et al., 2018)
Densenets (Huang, Liu, Maaten, & Weinberger, 2018)

Autres réseaux

Fitnet [Romero(2015)], Wideresnet(2017), Mobilenetv1, v2, v3 [Howard(2019)] : recherche de la meilleure architecture, EfficientNet (Tan & Le, 2020)

Voir aussi :

Règles de design d’un réseau convolutif

Nombre de filtres

Vous devriez augmenter le nombre de filtres tout au long du réseau :

  • la première couche extrait des caractéristiques de bas niveau
  • les couches supérieures composent sur le dictionnaire de caractéristiques des couches inférieures

Exemples :

  • LeNet-5 (1998) : \(6 5\times5\), \(16 5\times5\)
  • AlexNet (2012) : \(96 11\times11\), \(256 5\times5\), \(2\times(384 3\times3)\), \(256 3\times3\)
  • VGG (2014) : \(64-128-256-512\), tous \(3\times 3\)
  • ResNet (2015) : \(64-128-256-512\), tous \(3\times 3\)
  • Inception (2015) : \(32-64-80-192-288-768-1280-2048\), \(1\times1, 3\times3, '5\times5'\)

EfficientNet (Tan & Le, 2020) étudie les stratégies de mise à l’échelle des modèles convolutifs.

Champ récepteur effectif (1/3)

Champ récepteur effectif (2/3)

Champ récepteur effectif (3/3)

For calculating the effective receptive field size, see this guide on conv arithmetic.

Convolutions A-trou

Le champ récepteur effectif peut grandir plus vite avec des convolutions a-trou (ou convolution dilatée) (Yu & Koltun, 2016):

Conv 3, Pad 1, Stride 1
Conv 3, Pad 0, Stride 1, Dilated 1

Illustration de ce guide sur l’arithmétique convolutive. Le constructeur de Conv2D accepte un argument dilation

Faciliter la circulation du gradient

Vous pouvez vérifier la norme du gradient par rapport aux paramètres des premières couches pour diagnostiquer les vanishing gradient

  • Connexions en court-circuit (par ex. ResNet, DenseNet, Highway)

  • têtes auxiliaires (par ex. GoogleNet)

Exemple de CNN

Jeu de données CIFAR-100

  • Le jeu de données CIFAR-100 est composé de \(100\) classes avec \(600\) images par classe.
  • Les images sont en RGB de \(32\times 32\)
Extrait de CIFAR-100
  • L’ensemble d’entraînement contient \(500\times 100\) images, et l’ensemble de test contient \(100 \times 100\) images.

Architecture du modèle et configuration de l’optimisation

Opérateur Résolution Taille CR #Canaux
BlocConv \(32\times32\) \(5\times5\) 32
BlocConv \(32\times32\) \(9\times9\) 32
Sous \(16\times16\) \(15\times15\) 32
BlocConv \(16\times16\) \(15\times15\) 128
BlocConv \(16\times16\) \(23\times23\) 128
Sous \(8\times8\) \(31\times31\) 128
PoolMoy \(1\times1\) 128
Linéaire \(100\)

BlocConv : 2x [Conv(1x3)-(BN)-Relu-Conv(3x1)-(BN)-Relu]
Sous : Conv(3x3, pas=2)-(BN)-Relu

Paramètres communs :

  • Batch size(32),
  • SGD(taux apprentissage=0.01) avec momentum(0.9)
  • taux d’apprentissage divisé par deux tous les 50 epochs
  • validation sur \(20\%\), arrêt précoce sur la perte de validation

Différentes configurations :

  • base
  • Conv-BN-Relu ou Conv-Relu
  • augmentation de données (Retournement horizontal, Translation(5pix), Échelle(0.8,1.2)), Recadrage central(32)
  • Dropout, L2, lissage d’étiquettes

Nombre de paramètres : \(\simeq 2M\)
Temps par epoch (1080Ti) : 17s, 42min temps d’entraînement Si appliquée, seuls les poids des couches de convolution et linéaires sont régularisés (pas les biais, ni les coefficients de la normalisation par lots)

Résultats

Pas de régularisation, pas de Batchnorm
Avec batchnorm après chaque convolution (notons l’effet régularisateur)
Avec dataset augmentation (HFlip, Scale, Trans)
Avec regularization : L2 (0.0025), Dropout(0.5), Label smoothing(0.1)

Bibliography

References

Voir plutôt le document en ligne references.pdf

Ciresan, D., Meier, U., & Schmidhuber, J. (2012). Multi-column deep neural networks for image classification. In 2012 IEEE Conference on Computer Vision and Pattern Recognition (pp. 3642–3649). Providence, RI: IEEE. https://doi.org/10.1109/CVPR.2012.6248110
Fukushima, K. (1980). Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36(4), 193–202. https://doi.org/10.1007/BF00344251
Glorot, X., & Bengio, Y. (2010). Understanding the difficulty of training deep feedforward neural networks. In Roceedings of the13thInternational Conferenceon Artificial Intelligence and Statistics (AISTATS) 2010 (p. 8).
He, K., Zhang, X., Ren, S., & Sun, J. (2016a). Deep Residual Learning for Image Recognition. In 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (pp. 770–778). Las Vegas, NV, USA: IEEE. https://doi.org/10.1109/CVPR.2016.90
He, K., Zhang, X., Ren, S., & Sun, J. (2016b). Identity Mappings in Deep Residual Networks. arXiv:1603.05027 [Cs]. Retrieved from http://arxiv.org/abs/1603.05027
Huang, G., Liu, Z., Maaten, L. van der, & Weinberger, K. Q. (2018). Densely Connected Convolutional Networks. arXiv:1608.06993 [Cs]. Retrieved from http://arxiv.org/abs/1608.06993
Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). ImageNet classification with deep convolutional neural networks. Communications of the ACM, 60(6), 84–90. https://doi.org/10.1145/3065386
LeCun, Y., Boser, B., Denker, J. S., Henderson, D., Howard, R. E., Hubbard, W., & Jackel, L. D. (1989). Backpropagation Applied to Handwritten Zip Code Recognition. Neural Computation, 1(4), 541–551. https://doi.org/10.1162/neco.1989.1.4.541
Simonyan, K., Vedaldi, A., & Zisserman, A. (2014). Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps. arXiv:1312.6034 [Cs]. Retrieved from http://arxiv.org/abs/1312.6034
Simonyan, K., & Zisserman, A. (2015). Very Deep Convolutional Networks for Large-Scale Image Recognition. In arXiv:1409.1556 [cs]. Retrieved from http://arxiv.org/abs/1409.1556
Springenberg, J. T., Dosovitskiy, A., Brox, T., & Riedmiller, M. (2015). Striving for Simplicity: The All Convolutional Net. arXiv:1412.6806 [Cs]. Retrieved from http://arxiv.org/abs/1412.6806
Srivastava, R. K., Greff, K., & Schmidhuber, J. (2015). Training Very Deep Networks, 9.
Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., … Rabinovich, A. (2014). Going Deeper with Convolutions. arXiv:1409.4842 [Cs]. Retrieved from http://arxiv.org/abs/1409.4842
Tan, M., & Le, Q. V. (2020). EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. arXiv:1905.11946 [Cs, Stat]. Retrieved from http://arxiv.org/abs/1905.11946
Yu, F., & Koltun, V. (2016). Multi-Scale Context Aggregation by Dilated Convolutions. arXiv:1511.07122 [Cs]. Retrieved from http://arxiv.org/abs/1511.07122
Zeiler, M. D., & Fergus, R. (2014). Visualizing and Understanding Convolutional Networks. In D. Fleet, T. Pajdla, B. Schiele, & T. Tuytelaars (Eds.), Computer VisionECCV 2014 (pp. 818–833). Cham: Springer International Publishing. https://doi.org/10.1007/978-3-319-10590-1_53