Au début de ce mois (mai 2019), une nouvelle version 1.0.0-beta4 de DL4J a été publiée. Je voudrais résumer les types de fonctions qui ont été ajoutées.
Cliquez ici pour les notes de version en anglais. https://deeplearning4j.org/release-notes#onezerozerobeta4
DL4J Deeplearning4J est un framework d'apprentissage en profondeur open source qui peut être développé dans des langages JVM tels que Java / Scala / Kotlin. Le développement est en cours, dirigé par Skymind, une start-up basée à San Francisco.
En parlant d'apprentissage profond, il y a une image de Python. Mais,
--Java est principalement utilisé dans les bureaux gouvernementaux et les systèmes d'entreprise. ――En termes de langage de programmation, les développeurs Java sont les plus --DL4J prend en charge nativement Hadoop / Spark, qui est une infrastructure Big Data. -Support commercial par Skymind
Dans ce contexte, Java occupe en fait une certaine part dans le monde du deep learning. Bien qu'il s'agisse des données de 2018, elles sont situées au milieu lorsque l'on regarde le nombre d'étoiles (axe horizontal dans la figure ci-dessous) sur GitHub de chaque framework.
(Source de l'image: https://www.kdnuggets.com/2018/04/top-16-open-source-deep-learning-libraries.html)
Les frameworks Python tels que TensorFlow, PyTorch et Chainer sont essentiellement destinés à la recherche et au développement et à une utilisation expérimentale, et les résultats de recherche spectaculaires que nous voyons chaque jour sont développés à l'aide de ces frameworks. Je pense qu'il y en a beaucoup. J'ai l'impression que DL4J tente de se différencier en se concentrant sur sa position commerciale (même s'il peut être utilisé gratuitement, bien sûr).
Vous pouvez également l'utiliser par Importer le modèle construit avec Keras vers DL4J. En outre, il prend également en charge l'importation de modèles TensorFlow et de modèles au format ONNX / PMML.
Par conséquent, il est possible d'utiliser Python pour le développement et Java pour le fonctionnement.
Jetons un coup d'œil aux points forts des fonctionnalités ajoutées dans la nouvelle version 1.0.0-beta4 de DL4J.
Nous examinerons les détails de chacun ci-dessous.
ND4J est une bibliothèque de calcul scientifique pour les JVM. Il peut être facile d'imaginer la version Java de Numpy en Python. Il y a aussi rapporte que ND4J est deux fois plus rapide que Numpy. Bien sûr, il prend en charge CUDA et vous pouvez également utiliser le GPU pour accélérer les calculs.
D'ailleurs, dans les versions précédentes de ND4J, le type de matrice N-dimensionnelle (tenseur) était limité à float / double. À partir de la version 1.0.0-beta4, Tensol prend également en charge tous les types de données courants suivants:
Surtout avec le support de type FP16 et INT, il semble que l'on puisse s'attendre à la miniaturisation et à l'accélération du réseau de neurones.
La prise en charge de MKL-DNN, une bibliothèque d'accélération de réseau neuronal profond (DNN) pour les processeurs Intel, a également été ajoutée.
Vous pouvez utiliser MKL-DNN pour accélérer les couches suivantes:
ConvolutionLayer
and Convolution1DLayer
(and Conv2D
/Conv2DDerivative
ND4J ops)SubsamplingLayer
and Subsampling1DLayer
(and MaxPooling2D
/AvgPooling2D
/Pooling2DDerivative
ND4J ops)BatchNormalization
layer (and BatchNorm
ND4J op)LocalResponseNormalization
layer (and LocalResponseNormalization
ND4J op)Convolution3D
layer (and Conv3D
/Conv3DDerivative
ND4J ops)De plus, la prise en charge d'autres couches telles que «LSTM» sera prise en charge dans une version ultérieure. Vous pouvez également désactiver globalement MKL-DNN en ajoutant la ligne suivante:
python
Nd4jCpu.Environment.getInstance().setUseMKLDNN(false);
Il est également possible d'invalider uniquement des instructions spécifiques en définissant la variable d'environnement ND4J_MKL_FALLBACK
.
python
ND4J_MKL_FALLBACK=conv2d,conv2d_bp
Les versions précédentes de ND4J utilisaient un garbage collection périodique pour la libération automatique de la mémoire. (Pour le ramasse-miettes, Qiita "Organiser le mécanisme de Java GC" était facile à comprendre.)
Cependant, dans ND4J, à partir de 1.0.0-alpha, en tant que modèle de gestion de mémoire supplémentaire, [workspace](https://deeplearning4j.org/docs/latest/deeplearning4j- Il a introduit le concept d'espaces de travail de configuration). La mémoire peut être réutilisée sur l'espace de travail sans l'intervention d'un garbage collector.
Lors de la formation d'un réseau neuronal avec DL4J, il ne devrait fondamentalement pas y avoir de mémoire à libérer. Par conséquent, un garbage collection périodique toutes les quelques secondes a ajouté une surcharge de performances.
À partir de la version 1.0.0-beta4, le garbage collection périodique est désactivé par défaut. (Vous pouvez également l'activer comme suit.)
python
Nd4j.getMemoryManager().togglePeriodicGc(true);
Nd4j.getMemoryManager().setAutoGcWindow(5000);
Le mécanisme Attention, qui a été annoncé par Google en 2017 sous le nom Attention Is All You Need, est devenu extrêmement populaire autour du papier de traduction de Google (Transformer). Il peut désormais être utilisé nativement avec DL4J.
L'explication de Attention est facile à comprendre dans le blog de Ryobot. (Source de l'image: http://deeplearning.hatenablog.com/entry/transformer))
BERT est une nouvelle méthode de pré-apprentissage des expressions linguistiques. Il a reçu une grande attention pour ses résultats SOTA (state-of-the-art) dans un large éventail de tâches de traitement du langage naturel.
(Source de l'image: https://twitter.com/_Ryobot/status/1050925881894400000)
Vous pouvez maintenant essayer BERT sur DL4J également.
BertIterator
pour la formation BERTLes fonctionnalités intéressantes suivantes peuvent être ajoutées secrètement.
PythonTransorfm
Ajout de /datavec-python/src/main/java/org/datavec/python/PythonTransform.java) (Utiliser le code de prétraitement des données Python en Java)Il existe de nombreux autres ajouts de fonctions et corrections de bogues. Veuillez vous référer aux Notes de version officielles pour le contenu qui n'a pas pu être traité dans cet article.
Pourquoi ne pas essayer d'utiliser DL4J 1.0.0-beta4, qui a de nombreuses nouvelles fonctionnalités pour prendre en charge nativement la nouvelle technologie qui est devenue un standard de cette manière.
Recommended Posts