Neuroph: Smart Java Apps with Neural Networks (Part 1)
Neural networks can learn to map input onto output data, and are used for tasks like automated classification, prediction, and artificially intelligent game characters. The NetBeans team interviewed Zoran Sevarac, who is working on Neuroph, the open-source neural network framework. We talk about what neural networks look like, how they do their magic, and why the NetBeans IDE was the natural choice for the Neuroph development team. In part two of the interview, we have a closer look at use cases of neural networks—and what they can do for Java developers like me and you.
Hi Zoran, please introduce yourself and your team!
My name is Zoran Sevarac, and I am a research assistant at the Laboratory for Artificial Intelligence at the University of Belgrade. My main research interests are neural networks, fuzzy logic, genetic algorithms and hybrid systems.
I'm particularly interested in applied artificial intelligence, which means that I like to make stuff and see how it works for real-world problems. It does not always have to be something serious and useful, sometimes it is interesting just to see how something works.
At the moment I'm working on Neuroph, the open source neural network framework, together with people like Ivan Goloskokovic and Jon Tait. Ivan talked me into putting the neural network framework I created on Source Forge, and that's how the project started. Jon was the first who successfully used the framework for a real-world application. After that he joined the project and helped us improve the framework in many ways.
What does Neuroph do?
Neuroph is a general Java neural network framework—It provides an easy way to use neural networks in Java programs thanks to its Java class library with an easy-to-use neural network API. It also comes with a GUI editor (called easyNeurons) for creating and training neural networks.
What are neural networks?
We can say that neural networks can learn to map input onto output data. Neural networks are computational models inspired by the principles of how the human brain works. They can learn from data, they are able to generalize well, and they are noise resistant.
Typically neural networks are used for problems like classification, prediction, pattern recognition, approximation, and association. They just need some sample data to learn from, and after they have learned, they can work with unknown input data, or even noisy or incomplete input data.
What does a neural network look like?
Every neural network consists of interconnected basic processing units called Neurons. The network learns by modifying connection weights between neurons during the training process. The picture below shows a simple neural network created with easyNeurons. This type of network is called Multi Layer Perceptron and it is one of the most commonly used networks.
If you are curious, you can create and train this network with our online demo application!
Who uses neural networks?
Some typical applications are image, fingerprint and face recognition, stock prediction, sport bets prediction, pattern classification and recognition, monitoring and control. They are used in industry, medicine (diagnostics), military applications (like radar image recognition), finance and robotics. Lately they are popular in games industry, because thanks to their learning mechanisms they can provide adaptive control and learning for computer controlled characters!
An interesting project to mention is Neuro-Evolving Robotic Operatives (NEROgame) where you evolve your own robotic army by tuning artificial brains for challenging tasks, and then put them to fight against another team!
Another interesting example is the driving simulation Colin McRae Rally 2.0 which uses neural networks to train computer controlled drivers.
What kind of input/output format can a neural network handle?
Neural networks handle numeric data as input, and they also output numeric data. So it can handle any kind of input as long as it is transformed to appropriate numerical form. Also you must provide a suitable way to interpret the network output.
It's just a question of transforming the real world values to a numeric form used by the neural network – multi-dimensional vectors with values in [0, 1] or [-1, 1].
Is it difficult to train a network?
To train the neural network you need to provide the data that network should learn: A training set of inputs and desired outputs. During the learning procedure the connection weights are adjusted every time the network doesn't show the desired behaviour. All neural network components and learning rules in Neuroph are already implemented and ready to use.
Furthermore you have a GUI tool that allows you to experiment with various network architectures and learning parameters. There is no general answer to this because the settings are problem dependent. In the future we plan to automate this process in Neuroph.
Why did you choose NetBeans IDE?
I like the Swing support very much, it makes it really easy to make GUIs for desktop applications, and it was the easiest way to migrate old code we had. Also I like the fact that after downloading and installing NetBeans you have everything you need to make full featured GUI applications, including version control support. No additional actions are required, like endless searching and installing plugins for plugins, and resolving compatibility issues. We are considering to migrate the whole GUI part to the NetBeans Platform when our feature set stabilizes.
Anything you would improve?
I would like better support for custom project types and NetBeans Platform applications, since I got stuck with that when I tried to use it. It appeared to me that it takes some time to learn it well, and it requires experience to use it efficiently.
What are your plans for the future?
I saw the NetBeans Platform tutorials and they are great, just what I was looking for. Some future version of GUI for Neuroph will definitely be based on the NetBeans Platform. In the future we'd like to organize NetBeans Platform training classes at my University, and I guess that could help you to promote NetBeans in the academic community.
Continue Reading: In part two of the interview, we have a closer look at use cases of neural networks—and what they can do for you.