[JAVA] Résumé des nouvelles fonctionnalités ajoutées dans Deeplearning4J 1.0.0-beta4

introduction

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

Qu'est-ce que DL4J en premier lieu?

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.

image.png (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.

Changements majeurs dans DL4J 1.0.0-beta4

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.

Prise en charge de plusieurs types de données dans ND4J

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.

Prise en charge de MKL-DNN

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:

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

ND4J: amélioration des performances en modifiant la méthode de gestion de la mémoire

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);

DL4J: Ajout de la couche Attention

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. image.png (Source de l'image: http://deeplearning.hatenablog.com/entry/transformer))

DL4J: prise en charge de BERT

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.

image.png (Source de l'image: https://twitter.com/_Ryobot/status/1050925881894400000)

Vous pouvez maintenant essayer BERT sur DL4J également.

finalement

Les fonctionnalités intéressantes suivantes peuvent être ajoutées secrètement.

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

Résumé des nouvelles fonctionnalités ajoutées dans Deeplearning4J 1.0.0-beta4
Résumé des nouvelles fonctionnalités de PrimeFaces 6.0.x
Liste des membres ajoutés dans Java 9
Liste des types ajoutés dans Java 9
Résumé des classes racine dans différentes langues
Résumé des hachages et symboles dans Ruby
Résumé de la sélection des éléments dans Selenium
Résumé des fonctionnalités simples de Bootstrap pour les débutants
Résumé de ce que j'ai appris dans Spring Batch
java1.8 nouvelles fonctionnalités
Résumé des commandes fréquemment utilisées dans Rails et Docker
Résumé des révisions (nouveaux problèmes de yuan) par version Java
Résumé personnel des types souvent utilisés dans JUnit 4
Résumé de la mise en œuvre des arguments par défaut en Java