Saturday, November 10, 2012

Выпущена версия WiFiLine 1.0.11

Я рад сообщить, что выпущена версия WiFiLine 1.0.11. Единственное важное новшество - алгоритм позиционирования на основе нейронных сетей.

Если Вы мало что знаете о нейронных сетях, то в двух словах - это универсальный обработчик данных, прекрасно справляющийся и с задачами навигации.

Важно отметить, что нейронные сети должны быть обучены прежде чем они смогут решать возложенные на них задачи, в частности определять местоположение. Обучение производится только однажды для каждой карты, и после того как обученная сеть сохранена, она без всякого внешнего проявления и вмешательства пользователя применяется в навигации. В будущем планируется все новые карты комплектовать уже обученными нейронными сетями, но в данный момент они должны обучаться на устройстве пользователя по мере необходимости.

Для того чтобы включить новый режим, нужно открыть диалог Настроек и выбрать из списка Алгоритм позиционирования пункт Нейронная сеть.

Если после этого нажать OK, приложение запросит подтверждение на начало обучения. Этот процесс может занять некоторое время, в зависимости от объема WiFi-данных в текущей карте.

Во время этого процесса приложение выводит диалог прогресса с информацией о текущей фазе и номере цикла внутри фазы. Количество фаз всего 2, но количество циклов может существенно меняться. Максимум - 1000, но обычно обучение требует гораздо меньшего числа. По времени это - несколько секунд.

После того как сеть обучена, диалог прогресса удаляется и показывается всплывающее уведомление "Готово". Теперь можно определять текущее положение точно таким же образом, как это делается при любом другом выбранном алгоритме.

Для обучения нейронной сети требуется достаточное количество WiFi-данных в карте, поэтому накладываются следующие ограничения: в карте должно быть минимум 30 точек измерения и 3 точки доступа. Если данных меньше, сеть не будет использоваться.

Если вернуться в диалог Настроек и выбрать другой алгоритм позиционирования, приложение спросит, нужно ли удалить существующую нейронную сеть. Обычно следует отвечать "Нет", что сохранит сеть, и в следующий раз, когда она будет включена, её не потребуется обучать снова.

Единственная причина, по которой может потребоваться удалить сеть, это желание её обучить заново. Это имеет смысл в редких случаях, когда поведение сети не достаточно хорошо. Каждый раз при обучении сети формируется абсолютно новый экземпляр, отличный от всех предыдущих. Они должны работать одинаково (в теории), но могут изредка деградировать (на практике). Причины этого описываются в следующем параграфе, адресованном людям, которые знакомы с нейронными сетями чуть лучше обычных пользователей.

Как Вы знаете, нейронные сети имеют огромное количество настраиваемых параметров - число входов, конфигурация и размер сети, скорость обучения, предобработка данных и т.д. Все эти сложности скрыты здесь от пользователей, но за счет того, что параметры подстраиваются автоматически на основе некоторых практических соображений. К сожалению, такая "автоматизация" накладывает ограничения на общую гибкость нейросетевого подхода. Таким образом, могут встретиться случаи с такими WiFi-измерениями, которые создадут трудности для конкретной нейронной сети.

Теперь WiFiLine имеет 4 алгоритма позиционирования, и чуть позже я возможно сравню их более подробно.

WiFiLine 1.0.11 is out

I'm glad to inform you that a brand new version of WiFiLine - 1.0.11 - is ready and has been just uploaded to Google Play store. The only one and main feature of this version is a new location algorithm, based on neural networks.

If you don't know much about neural networks I must say that this is a universal problem solver, well adaptable for navigation tasks as well.

One important thing about neural networks is that they must be trained before they can help you to determine current location. This operation performed only once for every map, and after it's finished, the trained neural network is stored internally and used seamlessly for location as needed. In future I plan to provide trained neural networks for every new map, but currently they should be trained on a user device ad hoc.

In order to enable new location mode you should open the "Settings" dialog as usual, and then choose Neural Network from the Location Algorithm drop down list.

After this, if you press OK, the application will ask your confirmation for starting neural network learning. This process may take a while, depending from a number of WiFi-data available in current map.

During this process the application shows a progress dialog which updates information about current phase of learning and cycle of learning. Number of phases is only 2, but number of cycles in each phase can vary significantly. The maximum is 1000, but normally learning is supposed to be completed much earlier. It takes a few seconds.

After the neural network is trained, progress dialog is removed and a tooltip "Ready" is shown. You may now detect your location in the same way as you do with any other location method.

It must be noted that for neural network learning there must be a sufficient amount of WiFi-data in a map, so the following limitations are applied: the map must contain at least 30 points and 3 hotspots. If a map contains fewer data, neural network can't be used.

If you return back to the "Settings" dialog and choose a location algorithm other than neural network, the application will ask you to delete existing neural network. You should normally answer "No" to keep the network for future, so that next time you enable neural network it shouldn't be trained anew.

The only reason why you might want to delete neural network is to re-train it. This can be necessary in some rare cases, if you think neural network performance is not good enough. Every time you train a network, it will be a new instance, different to previous ones. They should behave equally in theory, but can occasionally degrade in practice. The reason for this is described below, in a paragraph for those who knows a little more about neural networks.

As you may know, neural networks have a lot of parameters for customization - number of inputs, number of layers and neurons, learning rate, data normalization algorithms, etc. All this complexity is hidden from ordinary users here, but it's done at the expense of adjusting the abovementioned parameters automatically, based on some heuristics. Unfortunately, this "automatics" applies some restrictions on in-general flexibility of neural networks. Thus there may happen specific WiFi-measurements which create difficulties for a given neural network.

Now WiFiLine provides 4 location algorithms, and some time later I'll probably compare them in details.

Tuesday, November 6, 2012

Можно ли использовать информацию о сотовом сигнале в позиционировании?

Одной из новых возможностей, которые я планировал, но не анонсировал в предыдущем сообщении, была технология использования в навигационных алгоритмах информации о соседних сотовых станциях. Известно, что такую информацию используют многие компании для грубого определения местоположения, и вопрос был в том, можно ли её применять для более точного позиционирования.

К сожалению, после нескольких тестов я должен констатировать, что информация о соседних сотовых башнях не подходит для этой задачи.

Во-первых, список GSM и UMTS сот по-разному формируется в устройствах разных производителей. Во-вторых, список быстро меняется и выглядит обрезанным, скорее всего, специально из соображений оптимизации расходования ресурсов. В-третьих, уровень сигнала может заметно меняться за короткий промежуток времени, что можно отнести, по-видимому, к побочному эффекту от взаимных радио помех в плотном поле, которое формируется в крупных городах. Наконец, даже если бы информация о сотах была стабильной, потребовалось бы повторять сканирование каждого объекта несколько раз по числу наиболее популярных операторов связи, что может составить достаточно большое число.

Вывод следующий: информация о сотовых сигналах не будет использоваться в WiFiLine по крайней мере в ближайшее время.

Information about neighbour cell towers - can it help in positioning?

One of the features that I planned but did not disclose in the previous announcement was an idea to use available information about neighbour cell towers in positioning algorithms. It's known that such information is used by many companies for coarse location detection and the question was what accuracy can this method afford, and how reliable this information is for a fine-grained location.

Unfortunately, after some tests I must say that information about neighbour cells is not applicable for this task.

First, the list of neighbour GSM and UMTS cells is populated with large distinctions between devices of different manufacturers. Second, the list is quickly updated and often looks truncated, for the sake of resources saving, I suppose. Third, signal levels can change significantly in short time, that I can only suggest as a side-effect of interferences from tight urban radio environment. At last, even if cell information would demonstrate decent consistency, it would require to scan the environment for several most popular mobile providers, which can be a large number.

The bottom-line is that neighbour cells information will not be used in WiFiLine in near future.