News for hackers. Stuff that matters.
Re:Deep learning is creating computer systems we don't fully... by jimbokun on Wednesday July 13, 2016 @10:58AM (#12086639)
Unequivocally yes.

Obviously no one has a full mental model in their head of everything going on in their phone (for example) at a given moment in time. But when it really matters, and there is a specific question to answer, and a programmer with experience writing the kind of software in question has full access to all of the source code, its possible to get an answer to why a program behaved in a particular way.

I'm a programmer, and this is what I do every day.

And in those rare cases where knowledge of the specific hardware is required, there are experts who understand the hardware and can answer the relevant questions.

So for machine learning approaches, what is the equivalent of the "source code"? What resource is there to examine to determine how the system will respond to a given set of inputs, and why? Evidently, there are not clear answers, at least for some machine learning approaches.

Re:Deep learning is creating computer systems we don't fully... by vardump on Wednesday July 13, 2016 @11:23AM (#12086872)
To start with, most computers are running about 20-30 microcontrollers. No source code, most of the time even no access to the firmware.

Phones have a bit fewer, but I think you'll find at least about 10.

A simple cheap SD memory card has an embedded core, usually ARM7TDMI. Even most lithium batteries have an integrated microcontroller.

I'm also a programmer, I do bare metal embedded, kernel drivers and such. I often don't have anyone else to ask from, except occasionally hardware guys. They're also often stumped.

Re:Deep learning is creating computer systems we don't fully... by jimbokun on Wednesday July 13, 2016 @12:09PM (#12087311)
Interesting.

So in a high profile case, like the Tesla Autopilot fatality, if the behavior was traced back to a specific micro-controller, it might be just as hard to determine why the system behaved as it did, as with a complex neural network? Even with a company's reputation at stake, it's not possible to hire a consultant with a deep understanding of obscure micro controllers?

I only deal with the source code level, don't really have experience digging into the hardware level.

Re:Deep learning is creating computer systems we don't fully... by wrs on Wednesday July 13, 2016 @01:00PM (#12087740)
Just look at the Toyota acceleration lawsuit, where a consultant spent months trying to figure the system out and still ended up with a probabilistic explanation (basically, the software uses a bunch of bad practices that could result in bad effects that could include the alleged accelerator problem).

http://www.edn.com/design/automotive/4423428/Toyota-s-killer...

Re:Deep learning is creating computer systems we don't fully... by vardump on Wednesday July 13, 2016 @12:52PM (#12087660)
We rely on many layers of more or less leaky abstractions.

Components have always a set of intended behavior and some, often unknown or poorly understood, set of unintended behavior.

It's very important to understand that abstractions mask both intended and unintended behavior.

You deal with unintended side the best you can, with sanity checks and so on. But some of it inevitably leaks through.

Those outcomes that result from multiple systems being individually in good state but collectively causing undesired behavior are often very tricky to understand. On the flip side, when you do understand them, you tend to gain new surprising insights into the whole system.

Also timing makes understanding hard. When it comes to a complex network of systems, it's hard to concurrently reproduce the state where the effect occurs.

> So in a high profile case, like the Tesla Autopilot fatality, if the behavior was traced back to a specific micro-controller, it might be just as hard to determine why the system behaved as it did, as with a complex neural network?

If Tesla has good, exhaustive, event logging facilities, a "black box", I guess they'll be able to figure out what happened by analyzing all of the available data with the systems knowledge they have.

Anyways, if it's not systematic, why should Tesla autopilot mistake be handled so differently from a human being making a mistake?

You can't analyze why a human being caused an accident either. The best you can usually do is to develop scenarios "theories" based on the available evidence, but that's it.

Re:Deep learning is creating computer systems we don't fully... by jamescostian on Wednesday July 13, 2016 @11:01PM (#12091395)
I don't think analyzing why a human caused an accident is important either. However, being able to fix the bug is very important. If a programmer can identify the problem in their code, they can fix it. But how can one identify the problem in a neural network and fix it? At least right now, understanding an (actually useful) neural network might as well be impossible
Re:Deep learning is creating computer systems we don't fully... by Florin_Andrei on Wednesday July 13, 2016 @01:44PM (#12088115)
I think it's fair to say that we don't have systems anymore that could be 100% understood by a single person. Your smartphone for example, I think it could be 100% understood by a crowd of engineers just big enough to fill a modest concert hall.

Way, way back, I had an 8 bit computer that I built myself from chips and solder. The "permanent" memory was 16kB; I knew most of that code pretty well. Even then the CPU itself required quite a bit of study to comprehend.

Re:Deep learning is creating computer systems we don't fully... by Florin_Andrei on Wednesday July 13, 2016 @01:46PM (#12088130)
On the flip side, it may well turn out that systems complex enough to be 100% understood by a single person would be dumb and limited.

There are pretty significant limits to our conscious, logical understanding of the world.

Re:Deep learning is creating computer systems we don't fully... by l_dopa on Wednesday July 13, 2016 @11:23AM (#12086878)
Is knowing, for example, that there's a race triggered by a new optimization in compiler version X that happens under conditions Y and Z really a qualitatively different type of understanding than "the weights are such that the ANN computed this incorrect output for these inputs?"

In both cases we can only fix a particular instance of an error and effectively have no way to show that similar errors don't exist, or even that we didn't introduce new bugs with the fix.

Re:Deep learning is creating computer systems we don't fully... by Klockan on Wednesday July 13, 2016 @12:42PM (#12087581)
The difference is that all human written systems was once understood by a human. ANN on the other hand creates unlabeled spaghetti which gets impossible to reason about if you scale that up to megabytes. You could try to fix a bug by changing one of the values, but that would ruin the ANN since all the values were chosen to be optimal. Thus the only way to make it better would be to change lots of unlabeled values at the same time and that is something no human can do. The only plausible way to fix a bug in an ANN is to incorporate said bug in the training set.
Re:Deep learning is creating computer systems we don't fully... by l_dopa on Wednesday July 13, 2016 @01:32PM (#12088012)
> The only plausible way to fix a bug in an ANN is to incorporate said bug in the training set

My point was not something about manipulating weights directly vs. augmenting the training set. The analogy is roughly, find a misclassification : add particular input to training set :: find a bug : add a patch/test case. I'm playing devil's advocate, of course, and there are obvious, important differences.

> The difference is that all human written systems was once understood by a human

But that's not one of them! In practice, we create software systems by getting some rough intuition about an interface, wiring together some components, then checking the results empirically. Basic components that everything else is built on, C compilers for instance, are based on ambiguous, even contradictory specifications.

Re:Deep learning is creating computer systems we don't fully... by jamescostian on Wednesday July 13, 2016 @11:06PM (#12091407)
> find a misclassification : add particular input to training set

Unfortunately, adding that particular input to the training set may mess up the ANN when given a different input (i.e. you fix one bug but create one or more new bugs, like a game of whackamole but where people die)

Re:Deep learning is creating computer systems we don't fully... by jimbokun on Wednesday July 13, 2016 @11:47AM (#12087114)
"the weights are such that the ANN computed this incorrect output for these inputs?"

Can we actually do this, for complex ANNs?

Re:Deep learning is creating computer systems we don't fully... by espadrine on Wednesday July 13, 2016 @12:52PM (#12087657)
Yes. The matrix is stored. In fact, there has been a number of visualization tools for neural nets to help track down which weights contribute to which results.

Additionally, the weights are constant in production, which makes analyzing production issues just a matter of logging the inputs and the outputs. Of course, for most convolutional nets, the inputs can get quite large (for example, a camera feed).

Re:Deep learning is creating computer systems we don't fully... by bhntr3 on Wednesday July 13, 2016 @03:06PM (#12088770)
Right. What we're talking about here are tools. We can't understand or debug the electrons moving through the chip. But we build systems using languages and we build tools to translate execution back into those languages (Debuggers) Or tools in the execution to allow us to understand what happened later (Logging, metrics.)

I think the key problem right now is that there are not too many models for which tracing the execution lets us know much about what's happening. A single decision tree. A linear model. But add ensembles to trees or layers to linear models and the ability to understand what's happening through logging disappears.

In this sense I think we're essentially in the pre-assembly language state of machine learning. For most programming languages, we assume correctness as a given. If it produces the wrong result on correct inputs, that's really bad.

With machine learning, we don't have perfect correctness. Aka accuracy. We focus so much on improving accuracy that we rarely consider the trade-off in debuggability or interpretability.

I think this will have to change. Advances in NLP and image stuff from deep learning are very exciting. Ignoring the evil AI concerns, I think the best step will be trying to understand better why the models did what they did. I think it will be a while before we can just ask the model and get a reliable answer. In the meantime, I think we'll work on a kind of meta programming where we integrate models better with their broader context. An example might be sequence to sequence models that have a way to expose sentence fragments and documents in the training set that influenced a word choice. Or automatic labeling of clusters in image representation layers that have semantic meaning to a human. There's some interesting work already on debugging tools for image classification that I really liked. On the phone so I'll try to provide the link later.

The trouble is it all seems very domain specific. Figuring out how do it in a way that's not so domain specific is i think a very interesting thing to work on.

Re:Deep learning is creating computer systems we don't fully... by borplefark on Wednesday July 13, 2016 @01:09PM (#12087833)
the only difference is you need code + data. Just because you don't understand it doesn't mean it's impossible to understand deep learning