==
выполняет контрольную проверку равенства, ссылаясь на то, что 2 объекта (строки в этом случае) относятся к одному и тому же объекту в памяти.
Метод equals()
будет проверять, будет ли содержимое или состояния двух объектов одинаковы.
Очевидно, что ==
работает быстрее, но во многих случаях может (может) давать ложные результаты, если вы просто хотите сказать, имеет ли 2 String
s тот же текст.
Определенно рекомендуется использовать метод equals()
.
Не беспокойтесь о производительности. Некоторые способы поощрения использования String.equals()
:
String.equals()
сначала проверяет ссылочное равенство (используя ==
), и если две строки одинаковы по ссылке, дальнейший расчет Выполняется! String.equals()
будет проверять длину строк. Это также является быстрой операцией, поскольку класс String
хранит длину строки, не нужно считать символы или кодовые точки. Если длины отличаются, дальнейшая проверка не выполняется, мы знаем, что они не могут быть равными. Когда все сказано и даже если у нас есть гарантия, что строки являются стажерами, использование метода equals()
все еще не является издержками, которые можно было бы подумать, определенно рекомендуемым способом. Если вам нужна эффективная проверка ссылок, используйте перечисления, где гарантируется спецификацией и реализацией языка, что одно и то же значение перечисления будет одним и тем же объектом (по ссылке).
Здесь важна разрывная симметрия, а не причина производительности. Представьте сначала два слоя многослойного персептрона (входные и скрытые слои):
[/g0]
При прямом распространении каждый блок в скрытом слое получает сигнал:
[/g1]
То есть каждый скрытый блок получает сумму входов, умноженную на соответствующий вес.
Теперь представьте, что вы инициализируете все веса до одного значения (например, ноль или один). В этом случае каждый скрытый блок получит точно такой же сигнал. Например. если все веса инициализированы до 1, каждый блок получает сигнал, равный сумме входов (и выходов sigmoid(sum(inputs))
). Если все веса - это нули, что еще хуже, каждый скрытый блок получит нулевой сигнал. Независимо от того, какой был вход - если все веса одинаковы, все единицы в скрытом слое будут одинаковыми.
Это основная проблема с симметрией и причиной, почему вы должны инициализировать весы случайным образом (или, по крайней мере, с разными значениями). Обратите внимание, что эта проблема затрагивает все архитектуры, которые используют каждое подключение к каждому.
Аналогия:
Надеюсь, это хорошая аналогия. Я попытался объяснить это как можно проще.
Представьте, что кто-то сбросил вас с вертолета на неизвестную вершину горы, и вы оказались там в ловушке. Везде туман. Единственное, что вы знаете, это то, что вы должны как-то подняться на уровень моря. Какое направление вы должны предпринять, чтобы перейти к наименьшей возможной точке?
Если вы не смогли найти путь к уровню моря, и поэтому вертолет возьмет вас снова и бросит вас на ту же самую вершину горы должность. Вам придется снова взять те же самые направления, потому что вы «инициализируете» себя на одинаковые стартовые позиции.
Однако, каждый раз, когда вертолет бросает вас куда-то случайным на гору, вы должны принимать разные направления и шаги. Таким образом, у вас будет больше шансов достичь наименьшей возможной точки.
Это то, что подразумевается под словом симметрии. Инициализация асимметрична (, которая отличается ), поэтому вы можете найти разные решения для одной и той же проблемы.
В этой аналогии, где вы приземляетесь, это веса. Таким образом, с разным весом есть больше шансов добраться до самой низкой ( или нижней ) точки.
Кроме того, она увеличивает энтропию в системе, чтобы система могла создавать больше информация, которая поможет вам найти нижние точки ( локальные или глобальные минимумы ).
Ответ довольно прост. Основные алгоритмы обучения являются жадными по своей природе - они не находят глобального оптимального, а скорее - «ближайшего» локального решения. В результате, начиная с любой фиксированной инициализации, вы отклоняете свое решение по отношению к определенному набору весов. Если вы делаете это случайным образом (и, возможно, много раз), гораздо менее вероятно, что вы застрянете в какой-то странной части поверхности ошибки.
Тот же аргумент применяется к другим алгоритмам, которые не способны найти глобальный оптимум (k-mean, EM и т. д.) и не относится к глобальным методам оптимизации (например, SMO-алгоритму для SVM).
symmetry
notcorrelation
? Кто первым использовал это слово? – nn0p 1 April 2016 в 14:46