# Best ANN Architecture for high-energy physics problem

First off, a disclaimer: I'm not sure if this is the right Stack Exchange for this question, but I'm not aware of a machine learning specific SE.

I am doing research into characterising particle jets in high-energy physics. I am trying to use image recognition techniques, in particular convolutional neural networks to characterize jets into two classes.

These classes can be distinguished by the following features:

• Sudden 'jump' in the number of hits between layers of a detector
• Radius of concentration of hits
• Energy deposited in each layer

I am using 123x123x4 images. Each pixel in each channel represents a level of energy deposited in a layer of the detector. I am concerned that it may even be impossible to do this in a deep-learning approach, as there are typically only 150-300 pixels filled in each image.

I would like to use a ConvNet to classify the two different types of jet. However, I am not sure what architecture to use.

There are other variables that might be of importance in classification, and I would like to be able to include these also (probably in the dense layer immediately before the output).

I tried the following architecture, and trained with Ada, Adamax and Adadelta with no convergence:

              ___________      _________      _________      _________     ________    ______
| Conv    |     | Max    |     | Conv    |     | Max    |    |       |   |     |
Image --> | Layer 1 | --> | Pool 1 | --> | Layer 2 | --> | Pool 2 | -->|       |   |     |
|_________|     |________|     |_________|     |________|    | Dense |   | Out |
| Layer |-->|_____|
Other      ------------------------------------------------------------>|       |
Data                                                                    |       |
|_______|


Are there any suggestions for architectures I should try?

• It seems the method of solution is presumed. Why the jump straight to conv-net and not something else? When it comes to images, transitioning from pixels to a zoo of features (list of thresholded patches sorted by area and perimeter, or aproximate Hausdorf dimension, ...) first is amazingly powerful; how are you preprocessing your data? – EngrStudent Mar 24 '17 at 12:13
• It sounds like you have some a priori information about features that distinguishes the classes. Are these features defined precisely enough that you can compute them explicitly? If so, using them as input to a classifier may be more straightforward than trying to learn a mapping from the pixel level. How are you doing the classification currently (i.e. where does your training data come from), and how many labeled examples do you have? – user20160 Mar 24 '17 at 12:15
• At the moment I am using the number of detector pixel hits in each layer within a cone as my primary discriminant. I do not have a precise definition of features that I can provide as far as I can work out. These are more rough features I would expect to differ between layers. I can produce an arbitrary number of labelled examples. At the moment I am using 1 million, but this can easily be increased. My training data comes from a MC simulation of a detector. – Thomas Russell Mar 24 '17 at 13:11
• Could you post an example image or two? – djs Mar 24 '17 at 14:16

Your architecture looks fine. I mean, it's straight out of MNIST lenet. It's a good solid network to start from. You can then evolve it over time, according to your loss curves, by adding capacity, ie layers, channels per layer, etc.

You could also consider adding dropout, for regularization.

As far as convergence... it's pretty much impossible not to converge, unless you are using too high a learning rate. So, divide your learning rate by 10, until it starts converging. You can just pick some tiny subset of eg 32 images, and just train on those images, using smaller and smaller learning rates, until the error on those 32 images drops to zero (which it should, because you'll overfit them, easily).

Then, once the loss on 32 images is dropping to zero, ie you've picked a small enough learning rate, fixed any bugs etc, then you can add more and more data, and then start increasing capacity of your network, ie adding layers etc. And you probalby want to add dropout, it's really good at encouraging generalization to test data.

Edit: oh, you're using Adadelta etc, which should handle learning rate for you. Well... I've mostly used SGD, and SGD is somewhat standard for deep nets (though gradually falling out of favor a bit recently). You might consider trying SGD, with a small learning rate, and seeing what happens.

Thomas Russell

First of all it is very interesting problem to solve.

I think you should not merge features extracted from CNN and other variables. You can try training CNN end-to-end for predicting class scores and train a Neural Network using other variables for predicting class scores and then some how merge both predictions(e.g. take mean) for final prediction. But the performance of this strategy also depend also on how you normalize inputs and design your networks?

• Can you share full architecture of your model? So you and I can get better insights. – Bhagyesh Vikani Mar 24 '17 at 12:01